https://oj.leetcode.com/problems/remove-duplicates-from-sorted-list-ii/
en a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example,
Given 1->2->3->3->4->4->5
, return 1->2->5
.
Given 1->1->1->2->3
, return 2->3
.
/**
* 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 == NULL || head->next == NULL) {
return head;
}
ListNode *pHead = new ListNode(head->val + 1);
pHead->next = head;
ListNode *pPrev = pHead;
ListNode *pCurr = pHead;
ListNode *pDelete = NULL;
while(pCurr != NULL) {
if (pCurr->next != NULL && pCurr->next->val == pCurr->val) {
do {
pDelete = pCurr->next;
pCurr->next = pCurr->next->next;
delete(pDelete);
} while(pCurr->next != NULL && pCurr->next->val == pCurr->val);
pDelete = pCurr;
pCurr = pCurr->next;
delete(pDelete);
pPrev->next = pCurr;
continue;
}
pPrev = pCurr;
pCurr = pCurr->next;
}
head = pHead->next;
pDelete = pHead;
delete(pDelete);
return head;
}
};