/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution {//on_my_own public: ListNode* deleteDuplicates(ListNode* head) { ListNode *ret=new ListNode(0);//最终返回的指针 ListNode *ret1=ret;//代表ret来进行 链接 节点的指针 ListNode *pre=head;//每一个重复小组的第一个节点 ListNode *cur=head;//每一个重复小组的最后一个节点 bool first=true;//1表示是第一次,0表示不是第一次 while(cur){ while(cur->next!=NULL && cur->val==cur->next->val){ cur=cur->next; }//退出的时候cur应该指向重复小组的最后一个元素 if(cur->next==NULL){ } if(pre==cur){//说明 重复小组 不重复 if(first){ ret->next=cur; ret1=cur; first=false; } else{ ret1->next=cur; ret1=cur; } pre=cur->next; cur=cur->next; } else{//说明 重复小组 重复了 if(cur->next==NULL){ if(first){ ret->next=NULL; } else{ ret1->next=NULL; } return ret->next; } pre=cur->next; cur=cur->next; } } return ret->next; } };