2016-09-21 5 views
0

誰でも次の削除方法が機能しない理由を説明できますか?私は削除しようとしている値で無限ループを作成するように見えます。リンクされたリストをループし、メソッドに渡された値のインスタンスをすべて削除し、削除されたノードの総数を返します(return num;)。リンクされたリスト削除メソッド

public int delete(T value) 
{ 
    int num = 0; 
    ListNode<T> trav = head; 
    ListNode<T> next = head.getNext(); 

    while(trav != null) { 
     if(trav.getValue().compareTo(value) == 0) { 
     trav = next;    
     num++; 
     } 
     if(next.getValue().compareTo(value) == 0) { 
     trav = next.getNext(); 
     num++; 
     } 
     trav = trav.getNext(); 
    } 

    return num; 
} 
+2

デバッガを使用してコードをステップ実行することはできますが、いくつかのことが明らかに間違っています。 a)頭を更新することは決してありません。b) 'next'を変更することはないので、' trav = next; 'を実行すると、2番目の要素に戻ります。 c)実際にノードを削除しないでください。 d) 'next'がポイントを持っていないかどうかを確認する' –

答えて

0

nextの値は決して変更しないでください。次回以降

if(trav.getValue().compareTo(value) == 0) { 
    trav = next;    
    num++; 
    } 
    if(next.getValue().compareTo(value) == 0) { 
    trav = next.getNext(); 
    num++; 
    } 

あなたは二ifで毎回同じ値を比較している、変化しません。

+0

'trav = trav.getNext();'? – NotToBrag

+0

'next'変数の値をまだ変更していない場合' next = next.getNext(); ' –

関連する問題