2016-09-21 76 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();' –