我迷路了,真的希望有人可以帮助我,我应该创建一个找到重复数字节点并删除重复项的函数。每当我运行整个代码时,我就会陷入while(current.next != null)
内的无限循环。
我的主要问题是,我知道我的问题存在于if (tester.data == current.data)
。我不明白他们为什么从不测试或比较(他们的in)。我很抱歉,如果这是一个模糊的问题,我一直盯着我的屏幕困惑了好几个小时。
public void removeDuplicate()
{
// removes all duplicate nodes from the list
Node tester = head;
Node previous = head;
Node current = head.next;
while (tester.next != null){
int i = 0;
while(current.next != null){
System.out.println("Stuck here3");
if (tester.data == current.data){
Node tempNode = current.next;
previous.next = tempNode;
current = tempNode;
size--;
System.out.println("Stuck here2");
break;
}
else{
previous = current;
current = current.next;
}
}
System.out.println("Stuck here1");
tester = tester.next;
current = tester.next;
}
}
答案 0 :(得分:0)
我的主要问题是,我知道我的问题在于(tester.data == current.data)。我不明白他们为什么从不测试或比较(他们的in)。我很抱歉,如果这是一个模糊的问题,我一直盯着我的屏幕困惑了几个小时。
不,那不是你的问题。事实上它们会进行测试和比较,并且当发生这种情况时删除节点。
但是,您的代码中还存在其他问题。
由于内部循环中的break
,您只为每个值删除一个副本。
如果删除break
它会越来越接近,但在循环结束时,你有
tester = tester.next;
current = tester.next;
并且您没有将previous
设置为适当的新值。
应该是
tester = tester.next;
previous = tester;
current = tester.next;
如果进行了这两项更改,您的代码将删除所有重复项,除非在列表的最后发生了重复项。
我怀疑我也可以解决这个问题,但我更倾向于完全重写。如果我这样做,我可以发布它。