Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
Example
Given 1->2->3->3->4->4->5
, return 1->2->5
.
Given 1->1->1->2->3
, return 2->3
.
/**
* Definition of ListNode
* class ListNode {
* public:
* int val;
* ListNode *next;
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
class Solution{
public:
/**
* @param head: The first node of linked list.
* @return: head node
*/
ListNode * deleteDuplicates(ListNode *head) {
// write your code here
if (head == NULL)
return head;
ListNode dummyNode(0);
dummyNode.next = head;
ListNode *preNode = &dummyNode;
ListNode *curNode = head;
ListNode *nextNode = head->next;
bool duplicateFound = false;
while (nextNode) {
if (nextNode->val == curNode->val)
{
nextNode = nextNode->next;
duplicateFound = true;
continue;
}
if (!duplicateFound) //根据duplated是否发现需要对preNode进行不同处理
{
preNode = preNode->next;
}
else
{
preNode->next = nextNode;
duplicateFound = false;
}
curNode = nextNode;
nextNode = nextNode->next;
}
if (duplicateFound)
preNode->next = NULL;
return dummyNode.next;
}
};