I
class Solution {
public:
ListNode *deleteDuplicates(ListNode *head)
{
if(head==NULL)return NULL;
ListNode *p=head;
while(p&&p->next)
{
ListNode *q=p->next;
if(q->val==p->val)
{
if(q->next)
{
p->next=q->next;
free(q);
}
else
{
p->next=NULL;
free(q);
}
}
else p=p->next;
}
return head;
}
};
II
class Solution {
public:
ListNode *deleteDuplicates(ListNode *head)
{
if(head==NULL)return NULL;
ListNode *p=head,*pre=head;
bool flag=false;
while(p)
{
ListNode *q=p->next;
while(q&&q->val==p->val)
{
flag=true;
if(q->next)
{
p->next=q->next;
}
else
{
p->next=NULL;
}
free(q);
q=p->next;
}
if(flag==false)
{
pre=p;
p=p->next;
}
else
{
if(p==head)
{
free(p);
p=q;
head=p;
}
else
{
pre->next=q;
free(p);
p=q;
}
flag=false;
}
}
return head;
}
};