删除单链表保留顺序中的重复项

Posted

技术标签:

【中文标题】删除单链表保留顺序中的重复项【英文标题】:remove duplicates in singly linked list retaining order 【发布时间】:2012-09-28 00:34:10 【问题描述】:

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

    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 循环没有终止,似乎我的最后一个值没有得到指向 null 的指针,但我不明白为什么。

【问题讨论】:

另见How to delete duplicate elements in a list efficiently 【参考方案1】:

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

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

iter = iter.next

【讨论】:

我看到您尚未接受所有问题的任何答案。您应该开始投票并接受答案。

以上是关于删除单链表保留顺序中的重复项的主要内容,如果未能解决你的问题,请参考以下文章

删除单链表中的循环[重复]

线性表练习之Example002-删除递增非空单链表中的重复值域节点

13.删除单链表中重复的元素

单链表按顺序插入和删除值

单链表练习题

数据结构不带头结点非循环的单链表