Given a sorted linked list, delete all nodes that have duplicate numbers, leaving onlydistinctnumbers from the original list.

For example,
Given1->2->3->3->4->4->5, return1->2->5.
Given1->1->1->2->3, return2->3.


删除排序链表中的重复数据。与83题对比可知,83题要求重复数据保留一个,而此题要求出现重复数据时,删除重复数据的节点,一个不留。故此题与83题类似。


1)如果空链表或一个节点,返回即可。

2)循环条件是链表不为空,此时最后一个节点需处理,当出现最后两个节点值一致时。此时需要逐个删除。

3)当出现当前节点和下一节点值相同时:指向下个节点并删除当前节点。

4)flag作用:当两个节点相同时,我删除当前节点后,flag置为一,标示下个节点是重复值节点,需删除。删除完并将标示置零。

5)否则保留节点。指向下个节点即可。

/***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/structListNode*deleteDuplicates(structListNode*head){if(head==NULL||head->next==NULL){returnhead;}structListNode**list=&head;intflag=0;while(*list){if((*list)->next!=NULL&&(*list)->val==(*list)->next->val){flag=1;structListNode*delete=*list;(*list)=(*list)->next;free(delete);}elseif(flag==1){flag=0;structListNode*delete=*list;(*list)=(*list)->next;free(delete);}else{list=&(*list)->next;}}returnhead;}