0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

浅析LeetCode 83删除排序链表中的重复元素

算法与数据结构 来源:吴师兄学算法 2023-02-06 10:25 次阅读

一、题目描述

给定一个已排序的链表的头head,删除所有重复的元素,使每个元素只出现一次。返回已排序的链表。

30b3a59c-a4af-11ed-bfe3-dac502259ad0.png

二、题目解析

由于给定的链表是排好序的,因此重复的元素在链表中出现的位置是连续的,这个很关键。

因此我们只需要对链表进行一次遍历,就可以删除重复的元素。

具体操作如下:

1、设置一个指针cur,指向链表的头节点,从链表的头节点开始访问每一个节点。

30c821f2-a4af-11ed-bfe3-dac502259ad0.png

2、开始不断遍历链表。

3、在访问过程中,只要当前节点和当前节点的下一个节点有值,就不断访问下去

4、当前节点和当前节点的下一个节点有两种关系。

5、当前节点和当前节点的下一个节点相同,此时要删除重复元素, 由于链表已经是排序的,所以去重操作只需要跳过后面这个重复的节点就行。

6、当前节点和当前节点的下一个节点不相同,那么 cur 这个节点可以保留下来,继续访问后面的节点

三、参考代码

// LeetCode 100题精讲:https://mp.weixin.qq.com/s/yznC53g46phq3qF7V4-obA
//作者:程序员吴师兄
//https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list/
classSolution{
publicListNodedeleteDuplicates(ListNodehead){
//从链表的头节点开始访问每一个节点
ListNodecur=head;

//在访问过程中,只要当前节点和当前节点的下一个节点有值,就不断访问下去
while(cur!=null&&cur.next!=null){

//当前节点和当前节点的下一个节点有两种关系

//1、当前节点和当前节点的下一个节点相同,此时要删除重复元素
//由于链表已经是排序的,所以去重操作只需要跳过后面这个重复的节点就行
if(cur.val==cur.next.val){

//执行这个操作之后,cur.next被跳过去了
cur.next=cur.next.next;

//2、当前节点和当前节点的下一个节点不相同,那么cur这个节点可以保留下来,继续访问后面的节点
}else{
//继续访问后面的节点
cur=cur.next;
}
}

//返回链表的头节点就是结果
returnhead;
}
}






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Val
    Val
    +关注

    关注

    0

    文章

    3

    浏览量

    8314
  • Headset
    +关注

    关注

    0

    文章

    13

    浏览量

    10396
  • null
    +关注

    关注

    0

    文章

    18

    浏览量

    3967

原文标题:LeetCode 83:删除排序链表中的重复元素

文章出处:【微信号:TheAlgorithm,微信公众号:算法与数据结构】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    讲解链表删除、修改以及插入

    上期介绍了动态链表怎么建立,以及使用循环的方式怎么输出整个链表各个节点的数据,这期主要讲解 链表删除、修改以及插入 !
    发表于 01-13 15:25 2556次阅读
    讲解<b class='flag-5'>链表</b>的<b class='flag-5'>删除</b>、修改以及插入

    数据结构:单链表排序

    给定一个单链表的头结点head(该结点有值),长度为n的无序单链表,对其按升序排序后,返回新链表。如当输入链表 {3,1,4,5,2} 时,
    的头像 发表于 11-30 13:56 1585次阅读
    数据结构:单<b class='flag-5'>链表</b>的<b class='flag-5'>排序</b>

    数据结构:删除有序链表重复节点

    给定一个有序单链表(从小到大有序)的头结点head(该结点有值),删除链表重复元素,使链表
    的头像 发表于 12-05 15:46 942次阅读
    数据结构:<b class='flag-5'>删除</b>有序<b class='flag-5'>链表</b>的<b class='flag-5'>重复</b>节点

    在一维字符串数组删除重复元素

    在一维字符串数组删除重复元素
    发表于 05-07 16:50

    python去除列表重复元素的简单操作

    的速度差别  m = ['b','c','d','b','c','a','a']  n = {}.fromkeys(m).keys()  print n  这两种都有个缺点,祛除重复元素排序变了
    发表于 12-21 15:19

    玩转C语言链表-链表各类操作详解

      链表概述  链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。它可以根据需要开辟内存单元。链表有一个“头指针”变量,以head表示,它存放一个地址。该地址指向一个元素
    发表于 09-18 13:30

    Labview如何实现相邻重复元素合并成一个

    比如输入一个数组AAAABBBBBCCCCCDDDDAAAA输出ABCDA,只需要去重相邻元素,处理后间隔可允许重复元素出现
    发表于 10-17 14:22

    OpenHarmony的HDF单链表及其迭代器

    范式是:初始化迭代器重复判断(集合还有未被访问的元素)获取下一个元素的访问方法读写下一个元素(也可能是
    发表于 08-30 10:31

    OpenHarmony的HDF单链表及其迭代器

    重复判断(集合还有未被访问的元素)获取下一个元素的访问方法读写下一个元素(也可能是删除这个
    发表于 09-05 11:38

    原创:Labview找出数组重复元素重复元素的全部索引

    *附件:查找重复元素.rar
    发表于 06-27 09:22

    合并两个排序链表

    合并两个排序链表一、题目要求 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的
    发表于 01-16 22:02 584次阅读

    如何进行单链表的查找、插入与删除的详细介绍包括了算法和源程序

    链表的查找、插入与删除。设计算法,实现线性结构上的单链表的产生以及元素的查找、插入与删除。具体实现要求:
    发表于 07-16 08:00 22次下载
    如何进行单<b class='flag-5'>链表</b>的查找、插入与<b class='flag-5'>删除</b>的详细介绍包括了算法和源程序

    LeetCode 26:删除有序数组重复

    在每次遍历过程,比较 i 和 j 指向的元素值大小,把大的元素填充到 cur 的位置,填充完毕说明那个元素已经放置在它应该放置的位置,不需要在管它了,把 cur 向前移动,同时把 i
    的头像 发表于 12-21 10:34 570次阅读

    链表的基础知识

    ,也就是数组,数组的每个元素之间的地址是连续的;对于链式存储来说,也就是平常所说的链表链表每个元素之间的地址并不是连续的,而是分散的,他们之间的联系通过结点的 next 指针来建立。
    的头像 发表于 01-20 17:00 1063次阅读
    <b class='flag-5'>链表</b>的基础知识

    java的util包下有哪些类

    地插入、删除和访问元素。 HashSet:无序的集合,不允许重复元素。 LinkedHashSet:有序的集合,不允许重复元素。 TreeSet:有序的集合,根据
    的头像 发表于 11-22 15:04 1120次阅读