若果说上道题没什么,不测试一次就提交过了,那么这道题呢?也是!代码有点多,思路还是很清晰的,分两种情况,一是删除的是头结点,二是删除的不是头结点,以及删除之后指针都指到哪了,花了十来分钟吧
ListNode *deleteDuplicates2(ListNode *head) {
if(head==NULL||head->next==NULL)
return head;
ListNode *p=head,*s=NULL;
ListNode *q=head->next;
bool flag=false;
if (p->val==q->val)
{
flag = true;
while(q!=NULL)
{
if (p->val==q->val)
{
delete p;
p = q;
q = q->next;
flag = true;
}
else
{
if (flag)
{
delete p;
p = q;
q = q->next;
flag = false;
}
else
break;
}
}
if(q==NULL&&flag)
{
delete p;
p = q;
}
}
head = p;
if(head==NULL||head->next==NULL)
return head;
s = head;
p = s->next;
q = p->next;
while(q!=NULL)
{
if (p->val==q->val)
{
s->next = p->next;
delete p;
p = q;
q = q->next;
flag = true;
}
else
{
if (flag)
{
s->next = p->next;
delete p;
p = q;
q = q->next;
flag = false;
}
else
{
s = p;
p = q;
q = q->next;
}
}
}
if (flag)
{
s->next = p->next;
delete p;
}
return head;
}