1. 程式人生 > >82. 刪除排序連結串列中的重複元素 II

82. 刪除排序連結串列中的重複元素 II

給定一個排序連結串列,刪除所有含有重複數字的節點,只保留原始連結串列中 沒有重複出現 的數字。

示例 1:

輸入: 1->2->3->3->4->4->5
輸出: 1->2->5

示例 2:

輸入: 1->1->1->2->3
輸出: 2->3

遍歷的時候需要記錄一個prev節點,用來 處理刪除節點之後節點重新連線的問題。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution { public: ListNode* deleteDuplicates(ListNode* head) { if(!head) { return head; } ListNode dummy(0); dummy.next = head; ListNode* prev = &dummy; ListNode* p = head; while(p && p->next) { if
(p->val != p->next->val) { prev = p; p = p->next; } else { int val = p->val; ListNode* n = p->next->next; while(n) { if(n->val != val) { break
; } n = n->next; } prev->next = n; p = n; } } return dummy.next; } };