码迷,mamicode.com
首页 > 编程语言 > 详细

[Leetcode] Remove duplicate from sorted list ii 从已排序的链表中删除重复结点

时间:2017-06-14 16:31:26      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:details   val   修改表   .net   lin   art   origin   ret   return   

Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.

For example,
Given1->2->3->3->4->4->5, return1->2->5.
Given1->1->1->2->3, return2->3.

这题和Remove duplicate from sorted list的区别在于,本题中,只要结点只要出现重复则该值相等的结点都要删除,上题中留一个不删。

思路:这里有可能有修改表头(如:1->1->-1>2>3),一般修改表头的题目都会需要一个辅助指针,所以要新建一个结点。遍历链表,遇到相等的相邻结点,直接继续遍历;遇到不相等的两相邻结点时,若pre->next=cur说明cur没有重复的,pre=pre->next即可,若是不等于说明,可能有重复,则,pre连接cur但是pre不移动,需重新进入循环检验是否没有重复(没有重复时,pre->next=cur),直到没有重复结点。源代码

 

 1 class Solution {
 2 public:
 3     ListNode *deleteDuplicates(ListNode *head) 
 4     {
 5         if(head==NULL)  return head;
 6 
 7         ListNode *newList=new ListNode(-1);
 8         newList->next=head;
 9         ListNode *pre=newList;
10         ListNode *cur=head;
11 
12         while(cur)
13         {
14             while(cur->next&&pre->next->val==cur->next->val)
15             {
16                 cur=cur->next;
17             }
18 
19             if(pre->next==cur)
20                 pre=pre->next;
21             else
22             {
23                 pre->next=cur->next;
24             }
25 
26             cur=cur->next;
27         }
28         return newList->next;
29     }
30 };

 

[Leetcode] Remove duplicate from sorted list ii 从已排序的链表中删除重复结点

标签:details   val   修改表   .net   lin   art   origin   ret   return   

原文地址:http://www.cnblogs.com/love-yh/p/7008843.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!