2017-02-16 6 views
0

Was ist los mit meiner Remove-Funktion, Ich kann Kopf entfernen, aber kann keinen anderen Knoten entfernen.Was ist falsch mit meinem LinkedList Remove-Methode

SLinkedList.prototype.remove = function(value) { 
 
    if(!this.findValue(value))return; 
 
    if(this.head.value === value){ 
 
    this.head = this.head.next; 
 
    return; 
 
    } 
 
    var prev = null; 
 
    var cur = this.head; 
 
    while(cur.value !== value){ 
 
    prev = cur; 
 
    cur = cur.next 
 
    } 
 
    prev.next = cur.next; 
 
}

Dies ist ein Link zu allen JavaScript-Implementierung repl it

+0

Der Code erscheint oben zu entsprechen 'SLinkedList.prototype.findValue' und nicht' SLinkedList.prototype.remove' –

+0

Diese Funktion überprüft wird, ob dieser Wert, dass verkettete Liste existiert. Klicken Sie auf "repl it", um die vollständige Implementierung zu sehen – BeckiD

+0

naja ... Ihre remove-Methode (per code) entfernt nur den head-Wert oder den head.next-Wert (wenn Sie die Bedingung für die Suche nach this.head.next. Wert === Wert). Aber es geht nicht weiter. Vielleicht möchten Sie zuerst die Liste durchlaufen und das Element finden, wobei next.value der Wert ist. –

Antwort

0

Es gibt zwei Fehler in Ihrem fineValue() -Methode. Zuerst schaute deine while-Schleife auf diesen Kopf, der sich nie veränderte. Zweitens sind Sie nach der ersten Iteration falsch zurückgekehrt. Hoffe das hilft.

SLinkedList.prototype.findValue = function(value) { 
if (!this.head) return false 
    var cur = this.head; 
    while (cur) { //Need to check cur not this.head 
    if (cur.value === value) { 
    return true 
    } 
    cur = cur.next 
    //return false; //Move this out of the while loop 
} 
return false 
}