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; }