1

我迷路了,真的希望有人能在这里帮助我,我应该创建一个函数来查找重复的数字节点并删除重复项。每当我运行整个代码时,我都会陷入内部的无限循环while(current.next != null)

我的主要问题是,我知道我的问题存在于if (tester.data == current.data). 我不明白为什么他们从不测试或比较(他们的整数)。如果这是一个模糊的问题,我很抱歉,我已经困惑地盯着屏幕看了好几个小时。

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;
    }

}
4

1 回答 1

0

我的主要问题是,我知道我的问题在于 if (tester.data == current.data)。我不明白为什么他们从不测试或比较(他们的整数)。如果这是一个模糊的问题,我很抱歉,我已经困惑地盯着屏幕看了好几个小时。

不,那不是你的问题。他们实际上进行了测试和比较,并且在发生这种情况时删除节点是有效的。

但是,您的代码中还有其他问题。

由于break在内部循环中,您只需为每个值删除一个重复项。

如果你删除break它变得更近,但在循环结束时,你有

    tester = tester.next;
    current = tester.next;

并且您没有设置previous适当的新值。

它应该是

    tester = tester.next;
    previous = tester;
    current = tester.next;

进行这两项更改后,您的代码将删除所有重复项,除非有一个出现在列表的最后。

我怀疑我也可以解决这个问题,但我更倾向于完全重写。如果我这样做,我可能会发布它。

于 2012-09-21T02:28:07.223 回答