Wie man eine verkettete Liste umkehrt?
Node reverse(Node head) {
Node previous = null;
Node current = head;
Node forward;
while (current != null) {
forward = current.next;
current.next = previous;
previous = current;
current = forward;
}
return previous;
}
Wie genau ist es die Umkehrung der Liste? Ich verstehe, dass es setzt zuerst den zweiten Knoten zu forward
. Dann heißt es current.next
gleich ein null
Knoten previous
. Dann heißt es previous
ist jetzt current
. Schließlich current
wird forward
?
Ich kann nicht scheinen zu begreifen, und wie seine Umkehrung. Kann mir bitte jemand erklären, wie das funktioniert?
InformationsquelleAutor der Frage user1176235 | 2012-01-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
InformationsquelleAutor der Antwort Aquarius_Girl
Kehren Sie die Liste iterativ und immer haben die Liste in das Intervall [Kopf, vorige] richtig-Umgekehrt(also aktuelle ist der erste Knoten, dessen link nicht richtig gesetzt). Auf jedem Schritt, den Sie tun, die folgenden:
Wenn Sie tun, dass für alle Knoten, die Sie belegen kann(mit Induktion zum Beispiel). Dass die Liste korrekt rückgängig gemacht.
InformationsquelleAutor der Antwort Ivaylo Strandjev
Den code einfach geht die Liste und dreht die links bis Sie die Vorherige Rute, die es gibt, wie der neue Leiter.
Bevor:
Nach:
InformationsquelleAutor der Antwort Michael Borgwardt
InformationsquelleAutor der Antwort user2507212
Ich nenne es "cherry picking". Die Idee ist die Minimierung der Anzahl der swaps. Swapping passiert, zwischen nah und fern-index. Seine 2-Pass Algorithmus.
Beispiel 1:
Beispiel 2:
InformationsquelleAutor der Antwort NitinS
Rückwärtsfahren eine einfach verkettete Liste mittels iteration
InformationsquelleAutor der Antwort Nanobrains
InformationsquelleAutor der Antwort 010101010101kakaka92
Die grundlegende Idee ist, zu trennen von dem head-Knoten aus der ersten Liste und hängen Sie es an den Kopf der zweiten Liste. Wiederholt dies, bis die erste Liste leer ist.
Pseudocode:
Wenn Sie möchten, können Sie die ursprüngliche Liste ungestört, dann können Sie den code kopieren version rekursiv mit der Verwendung einer Hilfsfunktion.
Beachten Sie, dass die Helfer-Funktion tail-rekursiv. Dies bedeutet, dass können Sie erstellen, kopieren Umkehrung mittels iteration.
InformationsquelleAutor der Antwort Gregory Schoenmakers