一、题目描述
给定一个已排序的链表的头head,删除所有重复的元素,使每个元素只出现一次。返回已排序的链表。
二、题目解析
由于给定的链表是排好序的,因此重复的元素在链表中出现的位置是连续的,这个很关键。
因此我们只需要对链表进行一次遍历,就可以删除重复的元素。
具体操作如下:
1、设置一个指针cur,指向链表的头节点,从链表的头节点开始访问每一个节点。
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
+关注
关注
0文章
3浏览量
8288 -
Headset
+关注
关注
0文章
13浏览量
10365 -
null
+关注
关注
0文章
17浏览量
3700
原文标题:LeetCode 83:删除排序链表中的重复元素
文章出处:【微信号:TheAlgorithm,微信公众号:算法与数据结构】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
删除或替换数组中某元素
本帖最后由 samuergao 于 2014-11-21 14:01 编辑
曾经遇到想删除数组中某个元素的问题,比如要删除或者替换一个数组中所有为10的
发表于 07-01 16:24
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
如何进行单链表的查找、插入与删除的详细介绍包括了算法和源程序
单链表的查找、插入与删除。设计算法,实现线性结构上的单链表的产生以及元素的查找、插入与删除。具体实现要求:
发表于 07-16 08:00
•22次下载
C++ vector删除符合条件元素的编程技巧
C++ vector中实际删除元素使用的是容器vecrot中std::vector::erase()方法。 C++ 中std::remove()并不删除元素,因为容器的size()没有
LeetCode 26:删除有序数组中的重复项
在每次遍历过程中,比较 i 和 j 指向的元素值大小,把大的元素填充到 cur 的位置,填充完毕说明那个元素已经放置在它应该放置的位置,不需要在管它了,把 cur 向前移动,同时把 i 或者 j 向前移动。
java的util包下有哪些类
地插入、删除和访问元素。 HashSet:无序的集合,不允许重复元素。 LinkedHashSet:有序的集合,不允许重复元素。 TreeSet:有序的集合,根据
评论