前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >删除链表中重复的结点

删除链表中重复的结点

作者头像
名字是乱打的
发布2022-05-13 09:12:28
1.7K0
发布2022-05-13 09:12:28
举报
文章被收录于专栏:软件工程

题目描述

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,返回链表头指针。

情况一 去掉重复部分保留一个

例如,链表1->2->3->3->4->4->5 处-理后为 1->2->3->4->5

代码:

代码语言:javascript
复制
public ListNode deleteDuplication(ListNode pHead)
    {
        if (pHead==null){
            return pHead;
        }
        ListNode pre=pHead;
        ListNode curr=pHead.next;
        while (curr!=null){
            if (curr.val==pre.val){//如果当前结点的值和前一结点重复
                pre.next=curr.next;
                curr=pre.next;
            }else {
                pre=curr;
                curr=curr.next;
            }
        }
        return pHead;
    }
题目要求可能的情况二 去掉重复部分,都不保留,有重复就去掉

例如,链表1->2->3->3->4->4->5 处理后为 1->2->5

思想:

主要用了一个指针preNotParall 每次指向上一个不重复的数据 headpre是第一个不重复的数据(自己定义的,防止上来就是重复数据),也是头的上一个指针. pre和curr是工作指针,用来往后撸链表,留有用的.

看完代码的应该理解实际上我这里类似于用preNotParall来选取有用结点组成新链表.

代码:

代码语言:javascript
复制
 public ListNode deleteDuplication2(ListNode pHead) //重复元素一个都不保留
    {
        if (pHead == null) {
            return pHead;
        }
        ListNode headpre=new ListNode(0);//设headpre
        headpre.next=pHead;
        //{0,1,2,3,3,4,4,5}
        ListNode preNotParall = headpre;//记录上一个不重复的结点
        ListNode pre = pHead;
        ListNode curr = pHead.next;
        while (curr != null) {
            if (curr.val == pre.val) {//如果当前结点的值和前一结点重复
                //继续往下找,直到当前结点和前一结点值不同
                while (curr!=null&&curr.val == pre.val){
                    curr=curr.next;
                }
               preNotParall.next=curr;
               if (curr!=null){
                   pre=curr;
                   curr=pre.next;
               }else {
                   return headpre.next;
               }
            } else {
                preNotParall.next=pre;
                preNotParall=pre;
                pre = curr;
                curr = curr.next;
            }
        }
        return headpre.next;
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
    • 情况一 去掉重复部分保留一个
    • 代码:
      • 题目要求可能的情况二 去掉重复部分,都不保留,有重复就去掉
      • 思想:
        • 看完代码的应该理解实际上我这里类似于用preNotParall来选取有用结点组成新链表.
        • 代码:
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档