2016-09-21 82 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'時'這會把你帶回到第二個元素。 c)你實際上並沒有移除任何節點。 d)檢查'if(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();' –