一、题目描述
给定一个已排序的链表的头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浏览量
8309 -
Headset
+关注
关注
0文章
13浏览量
10391 -
null
+关注
关注
0文章
17浏览量
3917
原文标题:LeetCode 83:删除排序链表中的重复元素
文章出处:【微信号:TheAlgorithm,微信公众号:算法与数据结构】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论