一、题目描述
给定一个已排序的链表的头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浏览量
8441 -
Headset
+关注
关注
0文章
13浏览量
10573 -
null
+关注
关注
0文章
19浏览量
4261
原文标题:LeetCode 83:删除排序链表中的重复元素
文章出处:【微信号:TheAlgorithm,微信公众号:算法与数据结构】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
讲解链表的删除、修改以及插入
python去除列表重复元素的简单操作
玩转C语言链表-链表各类操作详解
Labview如何实现相邻重复元素合并成一个
如何进行单链表的查找、插入与删除的详细介绍包括了算法和源程序
LeetCode 26:删除有序数组中的重复项
链表的基础知识

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