2017-08-31 3 views
1

Also ListNodes haben mich wirklich verwirrt und ich habe versucht, Codeschnipsel zu verstehen, um zu sehen, wie sie funktionieren, aber die folgende umgekehrte Funktion kann ich gerade nicht die While-Schleife jemanden verstehen bitte erklären Sie es mir.Umkehren einer verknüpften Liste (Hilfe)

// Definition for singly-linked list: 
// class ListNode<T> { 
// ListNode(T x) { 
//  value = x; 
// } 
// T value; 
// ListNode<T> next; 
// } 
// 

ListNode<Integer> reverse(ListNode<Integer> l) { 
    if(l==null||l.next==null) 
     return l; 

    ListNode<Integer> p1 = l; 
    ListNode<Integer> p2 = p1.next; 

    l.next = null; 

    while(p1!=null&& p2!=null){ 
     ListNode<Integer> t = p2.next; 
     p2.next = p1; 
     p1 = p2; 
     p2 = t; 
    } 

    return p1; 

} 
+1

Welche Sprache habe ich? – OmegaNalphA

+0

@OmegaNalphA es ist Java – csmajor97

Antwort

0

Im Grunde machen sie eine temporäre Variable t, dass der Mehrwert p2 hält zeigt die Zeiger zwischen P1 und P2 zu schalten, dann die neue p2 Punkt, um auf diese temporäre Variable. Da sie p2.next bereits auf p1 deklariert haben, werden sie nie entfernt, obwohl p2 sie in der nächsten Zeile ersetzt.

Es ist irgendwie merkwürdig geschrieben, normalerweise habe ich es gesehen, wo die Zeiger herum gemischt werden und nicht so, wie es hier gezeigt wird.

+0

Was ich nicht verstehe, ist, wie die temporäre Variable t in der Lage ist, den Anfangswert von p2.next zu halten. Zum Beispiel, wenn ListNode p1 = l und dann machen wir l.next = null, verursacht dies auch p1.next = null. Also, wenn wir p2.next = p1 ändern, heißt das nicht auch ListNode t = p1 auch? – csmajor97

+0

Ich bin mir ziemlich sicher, in diesem Fall kopiert es den Wert wie in Java sie nicht wirklich mit Zeigern beschäftigen, so ist es eine Kopie des Objekts in p2.next. Eine Sache, die Sie tun können, um zu überprüfen, ist den Wert von t und p2.next jedes Mal, wenn die Ausführung geschieht (sagen Sie, fügen Sie eine Zeichenfolge in jeden Knoten, der inkrementiert) und sehen, was passiert/wie es sich ändert – OmegaNalphA

Verwandte Themen