2016-07-09 6 views
1

Überall auf Netz sehe ich das Programm, das wieUmgekehrte Liste von Header-Knoten?

hier Knoten ist der Kopfknoten von Schwanz revering starten

reverseNode(int node){ 

    if(node==null){ 
     return; 
    } 

    reverseNode(node.next); 

    Node temp = node.next; 
    node.next = node.prev; 
    node.prev=temp; 

    if(node.prev==null){ 
     headNode = node; 
    } 
} 

Aber ich kann der Ansatz denken, wo ich vom Kopfknoten auch wie umkehren kann

hier Knoten ist der Header-Knoten

reverseNode(int node){ 

    if(node==null){ 
     return; 
    } 

    Node temp = node.next; 
    node.next = node.prev; 
    node.prev=temp; 


    reverseNode(node.prev); 

    if(node.prev==null){ 
     headNode = node; 
    } 
} 

Aber ich nicht siehe Ansatz überall erwähnt. Gibt es einen Bug/ein Problem in diesem Ansatz oder ist es nicht optimiert?

Antwort

0

Die erste Version ist ein Beispiel für head recursion. Die zweite ist ein Beispiel für tail recursion. Hervorragende Erklärung hier: The difference between head & tail recursion.

+0

Also meine zweite Ansatz ist gut im Zusammenhang mit der Umkehr der verknüpften Liste – emilly

+0

Ja, Ihr Ansatz funktioniert und wird in der Regel effizienter in Bezug auf den Raum als der Kopf rekursive, wie es funktioniert eher wie eine Schleife (weniger Staat wird auf dem Aufrufstapel angezeigt, da der Großteil der Arbeit vor dem rekursiven Schritt ausgeführt wird). – Soggiorno

+0

Zugehörig: http://stackoverflow.com/questions/33923/what-istail-recursion – Soggiorno