82. 删除排序链表中的重复元素 II

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9 //1、如果下一个点和当前点相同,则删掉下一个点,并标记存在头结点
10 //2、如果下一个点和当前点不同,
11     //2.1、如果存在重复节点,进入下一个节点,然后pre->next = cur,并标记false
12     //2.2、没有重复节点,更新pre与cur
13 class Solution 
14 {
15 public:
16     ListNode* deleteDuplicates(ListNode* head) 
17     {
18         ListNode* dummy = new ListNode(-1);//头结点可能变化,所以添加虚拟节点
19         dummy->next = head;
20         
21         auto pre = dummy;
22         auto cur = head;
23         bool flag = false; //标记是否有重复元素
24 
25         while(cur)
26         {
27             if(cur->next && cur->next->val == cur->val) 
28             {
29                 cur->next = cur->next->next;
30                 flag = true;
31             }
32             else 
33             {
34                 if(flag) 
35                 {
36                     cur = cur->next;
37                     pre->next = cur;
38                     flag = false;
39                 }
40                 else 
41                 {
42                     pre = cur;
43                     cur = cur->next;
44                 }
45             }
46         }
47         return dummy->next;
48     }
49 };

 

posted @ 2020-03-31 10:53  Jinxiaobo0509  阅读(125)  评论(0)    收藏  举报