美文网首页
链表的去重

链表的去重

作者: 春天还没到 | 来源:发表于2017-12-07 16:24 被阅读0次

声明: 本总结仅为个人学习总结,以防止遗忘而作,不得转载和商用。
题目:给定排序的链表,删除重复元素,只保留重复元素第一次出现的结点.
如:
给定: 2->3->3->5->7->8->8->8->9->9->10
返回: 2->3->5->7->8->9->10
问题分析:
若p->next的值和p的值相等,则将p->next->next赋值给p,删除p->next;重复上述过程,直至链表尾端
Java版本的实现一:

public static void deleteDuplicateNode(Node pHead){
        Node pPre = pHead.next;
        Node pCur;
        while(pPre != null){
            pCur = pPre.next;
            if (pCur != null && pCur.value == pPre.value) {
                pPre.next = pCur.next;
            }else {
                pPre = pCur;
            }
        }
    }

实现二:

public static void deleteDuplicateNode2(Node pHead){
        Node pPre = pHead;
        Node pCur = pPre.next;
        Node pNext;
        while(pCur != null){
            pNext = pCur.next;
            while(pNext != null && pCur.value == pNext.value){
                pPre.next = pNext;
                pCur = pNext;
                pNext = pCur.next;
            }
            pPre = pCur;
            pCur = pNext;
        }
    }

题目进一步扩展,若发现生重复元素,则重复元素全部删除,
如:
给定: 2->3->3->5->7->8->8->8->9->9->10
返回: 2->5->7->10
Java实现如下:

public static void deleteDuplicateNode3(Node pHead){
        Node pPre = pHead;
        Node pCur = pPre.next;
        Node pNext;
        boolean bDup;
        while(pCur != null){
            pNext = pCur.next;
            bDup = false;
            while (pNext != null && pCur.value == pNext.value) {
                pPre.next = pNext;
                pCur = pNext;
                pNext = pCur.next;
                bDup = true;
            }
            if (bDup) {//此刻的pCur与原数据重复,删之
                pPre.next = pNext;
            }else {//pCur未发现重复,则pPre后移
                pPre = pCur;
            }
            pCur = pNext;
        }
    }

测试结果:

Linked List: 0->2->3->3->5->7->8->8->8->9->9->30->
Linked List: 0->2->5->7->30->

相关文章

  • 链表去重

    var deleteDuplicates = function(head) { var res =head; ...

  • 链表的去重

    声明: 本总结仅为个人学习总结,以防止遗忘而作,不得转载和商用。题目:给定排序的链表,删除重复元素,只保留重复元素...

  • 单链表去重

  • 1.数据结构-链表问题

    链表相关问题 删除节点 链表去重 有环链表 反转链表 链表排序 链表相交 其他问题 面试题 02.03. 删除中间...

  • 移除重复节点

    编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。 解法: Set 去重 新建一个Set集合,从链表的头...

  • 在单链表和双链表中删除倒数第K个节点

    单链表: 对于双链表,几乎与单链表一模一样,只需注意last的重连即可。

  • 26.有序数组去重

    返回一个int型变量以表示去重后的长度,并使链表前n个数为去重后的向量。 思路:利用循环遍历即可,只要后者比前者大...

  • 算法总结

    基本排序算法 二叉树三种遍历方式 反转链表 反转链表的m到n个节点 股票买入卖出最大利润 全排列 去重的全排列 L...

  • 去重去重

    哈哈^_^

  • 2018/7/3

    算是看完了05链表递归栈,目前小题还是写不出。接下来,再找去重的的看。看06查找排序。

网友评论

      本文标题:链表的去重

      本文链接:https://www.haomeiwen.com/subject/lpxjixtx.html