给定一个排序链表,删除所有重复的元素只留下原链表中没有重复的元素。
样例
给出1->2->3->3->4->4->5->null,返回1->2->5->null
给出1->1->1->2->3->null,返回 2->3->null
/**
* 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 NULL;
}
ListNode *p = head;
bool dupFound = false;
if (p->next != NULL && p->next->val == p->val)
{
while (p->next != NULL && p->next->val == p->val)
{
ListNode *temp = p->next->next;
delete p->next;
p->next = temp;
}
ListNode *next = p->next;
delete p;
return deleteDuplicates(next);
}
ListNode *result = head;
ListNode *q = head;
p = q->next;
while (p != NULL)
{
if (p->next != NULL)
{
if (p->next->val == p->val)
{
dupFound = true;
ListNode *temp = p->next->next;
delete p->next;
p->next = temp;
}
else
{
if (dupFound)
{
ListNode *temp = p->next;
delete p;
q->next = temp;
p = q->next;
dupFound = false;
}
else
{
q = p;
p = p->next;
}
}
}
else
{
if (dupFound)
{
q->next = NULL;
delete p;
dupFound = false;
}
p = NULL;
}
}
return result;
}
};