题解 | #删除有序链表中重复的元素-II#
删除有序链表中重复的元素-II
https://www.nowcoder.com/practice/71cef9f8b5564579bf7ed93fbe0b2024
struct ListNode* deleteDuplicates(struct ListNode* head ) {
// write code here
struct ListNode *pre,*nxt,*prePre;
if(head==NULL||head->next==NULL)
return head;
pre=head;
prePre=head;
nxt=pre->next;
int flag=0;//判断结点是否为重复结点的标志
while(pre!=NULL)
{
if(nxt!=NULL&&pre->val==nxt->val)
{
pre->next=nxt->next;
free(nxt);
nxt=pre->next;
flag=1;
}
else
{
if(flag)//结点为重复结点的情况
{
if(pre==head)//待删除的结点为头结点的情况
{
head=pre->next;
free(pre);
pre=head;
if(nxt==NULL)
break;
nxt=pre->next;
}
else
{
free(pre);
prePre->next=nxt;
pre=prePre->next;
if(nxt==NULL)
break;
nxt=nxt->next;
}
}
else
{
prePre=pre;
pre=pre->next;
if(nxt==NULL)
break;
nxt=nxt->next;
}
flag=0;
}
}
return head;
}

