0

所以我有一个单链表的抽象数据类型,我的编译器在运行这部分测试代码时卡住了。

    test.removeDuplicates();
    System.out.println("removeDuplicates() has been run, check following output for counts of 3");
    test.print();

我从给定列表中删除重复项的方法如下

public void removeDuplicates() 
{
    if (head == null) return;

    Node iter = head;

    while (iter != null) 
    {
        Node currNode = iter;
        while(currNode  != null && currNode.next != null)
        {
                if(iter.value == currNode.next.value)
                {
                    currNode.next = currNode.next.next;
                    nItem--;
                }
        currNode = currNode.next;
        }
    }
}

我认为这个 while while 循环遍历整个列表并通过使指针跳过值以删除重复值来取出重复值。

显然其中一个while循环没有终止,似乎我的最后一个值没有得到指向null的指针,但我不明白为什么。

4

1 回答 1

3

您没有iter在外部 while 循环上进行更新,因此它永远不会null导致外部循环无限运行。

在外部 while 循环结束之前添加此行

iter = iter.next

于 2012-09-28T00:39:48.663 回答