Remove-Methode für linkedList-Implementierung in Java
Ich habe diese Methode aus der Vorlesung auf das entfernen von Elementen aus linkedList
bei specified index
.
Ich verstehe, wie die Methode funktioniert, aber ich verstehe nicht, warum die for-loop
Blätter der current node pointer
zwei index vor dem gewünschten index.
Hier ist die Methode:
public void remove(int index) {
if (index == 0) {
//removing the first element must be handled specially
front = front.next;
} else {
//removing some element further down in the list;
//traverse to the node before the one we want to remove
ListNode current = front;
for (int i = 0; i < index - 1; i++) {
current = current.next;
}
//change its next pointer to skip past the offending node
current.next = current.next.next;
}
}
Den for-loop
geht aus 0 to < index-1
, während ich dachte, es sollte gehen von 0 to < index
. Auf diese Weise ist der Zeiger auf eine index
vor der index
musste gelöscht werden. Jedoch, die obige Methode funktioniert gut.
ZB:
in der unten LinkedList
Betrachten wir entfernen Node C
. Durch die oben genannten loop-Konstrukt current pointer
wird zeigen Node A
und current.next
wird Node B
. current.next.next
wird Node C
. Dabei current.next=current.next.next
führt Node B
löschen, anstatt Node C
.
Ich denke, etwas ist falsch mit meinem Verständnis, kann jemand erklären?
InformationsquelleAutor brain storm | 2014-01-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
In deinem Beispiel, entfernen
C
bedeutet index2
. Soi
geht nur bis0
, da1
ist nicht< 1
.current
beginnt beiA
, diefor
Schleifen einmalcurrent
gehtB
.current
istB
, socurrent.next.next
istD
, die effektiv entferntC
.index 5
element, meinecurrent pointer
werden beiindex 3
, aber ich denke, es sollte beiindex 4
zu entfernen das nächste?Entfernen index 5 (6. element) bedeutet, bewegen Sie den cursor
5 - 1
Zeiten. Der cursor würde dann auf das element, bevor Sie die eine, die entfernt wird.entfernen [index 5],die Schleife geht von 0<4 [0,1,2,3] vier mal ,dann aktuellen Punkt [index 4],also der aktuelle.weiter.Nächster Punkt [index 6],während aktuelle.nächsten = aktuellen.weiter.nächsten join the [index 6] [index 4 s Tail],das ist richtig.
Vielen Dank für die Klarstellung. Ich habe daran eine Weile, um zu begreifen,
Du bist herzlich willkommen. Es ist immer hilfreich, um es zu zeichnen wie Sie es in Ihrer Frage.
InformationsquelleAutor Sotirios Delimanolis