/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } }; */ class Solution { public: ListNode* nextNode(ListNode* pHead){//找下一个不重复结点 if(!pHead) return NULL; ListNode *p=pHead; bool flag=0; while(p->next){ if(p->val==p->next->val){ flag=1; p=p->next; } else if(flag){ flag=0; p=p->next; } else break; } if(!flag) return p; return NULL; } ListNode* deleteDuplication(ListNode* pHead) { ListNode *head=nextNode(pHead),*p=head,*q=head; if(!head) return NULL; while(p->next){ p=nextNode(p->next); q->next=p; if(!p) break; q=q->next; } return head; } };