Java Stack umdrehen ohne Veränderung an Stack 1?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Du meinst die alte Klasse Stack aus der Standardbibliothek?

Das ist auch eine List, und somit kannst du damit alles tun, was eine List so kann.

Ein möglicher Ansatz:

jshell> var s1 = new Stack<String>()
s1 ==> []

jshell> s1.addAll(List.of("a", "b", "c"))
$16 ==> true

jshell> var s2 = new Stack<String>()
s2 ==> []

jshell> s2.addAll(s1)
$18 ==> true

jshell> Collections.reverse(s2)

jshell> s2
s2 ==> [c, b, a]

Oder du iterierst durch s1 und fügst die Elemente einzeln zu s2 hinzu.

Wobei ich (wie auch die API-Doku) empfehlen würde, statt Stack ein Deque zu verwenden. Das ist ein bisschen angenehmer im Handling. Beispiel:

jshell> var s1 = new ArrayDeque<>(List.of("a", "b", "c"))
s1 ==> [a, b, c]

jshell> var s2 = new ArrayDeque<>();
s2 ==> []

jshell> s1.forEach(s2::addFirst)

jshell> s2
s2 ==> [c, b, a]