题目:
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example,
Given1->2->3->3->4->4->5, return1->2->5.
Given1->1->1->2->3, return2->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)
return NULL;
ListNode dummy(-1);
dummy.next = head;
ListNode* prev = &dummy, *cur = head;
while (cur)
{
bool duplicated = false;
while (cur->next != NULL && cur->val == cur->next->val)
{
duplicated = true;
ListNode* tmp = cur;
cur = cur->next;
delete tmp;
}
if (duplicated) //delete last duplicate node
{
ListNode* tmp = cur;
cur = cur->next;
delete tmp;
continue;
}
prev->next = cur;
prev = prev->next;
cur = cur->next;
}
prev->next = cur;
return dummy.next;
}
};
递归:(看的答案)
class Solution
{
public:
ListNode* deleteDuplicates(ListNode* head)
{
if (head == NULL || head->next == NULL)
return NULL;
ListNode* p = head->next;
if (head->val == p->val)
{
while(p && head->val == p->val)
{
ListNode* tmp = p;
p = p->next;
delete tmp;
}
delete head;
return deleteDuplicates(p);
}
else
{
head->next = deleteDuplicates(head->next);
return head;
}
}
};