Given 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
.
New a Node without being deleted help diminish the code.
/**
* 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) {
// Note: The Solution object is instantiated only once and is reused by each test case.
if (head == NULL)
return NULL;
ListNode* nhead = new ListNode(INT_MIN);
nhead->next = head;
ListNode *p = head, *pre = nhead, *next = NULL;
int visit = nhead->val;
while (p != NULL) {
next = p->next;
if (p->val == visit || (next != NULL && next->val == p->val)){
pre->next = next;
visit = p->val;
delete p;
}
else
pre = p;
p = next;
}
return nhead->next;
}
};
Python Version:
class Solution:
def deleteDuplicates(self, head):
if (head == None):
return head
dummy = ListNode(0)
dummy.next, cur, prev, visitedVal = head, head, dummy, None
while (cur != None):
if ((cur.next != None and cur.val == cur.next.val) or cur.val == visitedVal):
visitedVal, prev.next = cur.val, cur.next
del cur
cur = prev.next
else:
prev = cur
cur = cur.next
return dummy.next