標籤:代碼 重複元素 排序 ret dup init duplicate move return
題目描述
給定一個排序鏈表,刪除所有含有重複數位節點,只保留原始鏈表中 沒有重複出現 的數字。
樣本 1:
輸入: 1->2->3->3->4->4->5輸出: 1->2->5
樣本 2:
輸入: 1->1->1->2->3輸出: 2->3
解題思路
由於重複的節點要全部刪掉,所以再刪除時要先儲存重複節點的前一個節點,注意特殊情況是鏈表的開頭就是重複節點,所以應首先找到鏈表從左往右第一個不重複的節點作為前端節點,若前端節點不為空白,再從其後一個節點開始遍曆,如果是重複節點就找到該重複節點後面第一個不重複的節點,並將不重複節點拼接到上一個不重複節點之後,直到鏈表末尾。
代碼
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 class Solution {10 public:11 ListNode* deleteDuplicates(ListNode* head) {12 if(head == NULL) return NULL;13 ListNode *left = head;14 while(left && left->next && left->val == left->next->val){15 int val = left->val;16 while(left && left->val == val)17 left = left->next;18 }19 if(left == NULL) return NULL;20 head = left;21 ListNode *right;22 while(left){23 right = left->next;24 while(right && right->next && right->val == right->next->val){25 int val = right->val;26 while(right && right->val == val)27 right = right->next;28 }29 left->next = right;30 left = right;31 }32 return head;33 }34 };
LeetCode 82. 刪除排序鏈表中的重複元素 II(Remove Duplicates from Sorted List II)