删除重复节点

时间:2012-09-20 23:16:19

标签: java duplicates nodes

我迷路了,真的希望有人可以帮助我,我应该创建一个找到重复数字节点并删除重复项的函数。每当我运行整个代码时,我就会陷入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;
    }

}

1 个答案:

答案 0 :(得分:0)

  

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

不,那不是你的问题。事实上它们会进行测试和比较,并且当发生这种情况时删除节点。

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

由于内部循环中的break,您只为每个值删除一个副本。

如果删除break它会越来越接近,但在循环结束时,你有

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

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

应该是

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

如果进行了这两项更改,您的代码将删除所有重复项,除非在列表的最后发生了重复项。

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