题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
if(!pHead||!pHead->next) return pHead;
ListNode *first=pHead,*last=pHead,*tmp=NULL,*cur=NULL;
while(first&&pHead->val==first->val){
while(pHead->val==first->val){
first=first->next;
if(!first) break;
}
if(first==pHead->next) break;
else{
while(pHead!=first){
tmp=pHead;
pHead=pHead->next;
delete tmp;
}
}
}
first=pHead;
last=pHead->next;
while(first){
while(first->next&&last->next&&first->next->val==last->next->val){
last=last->next;
}
if(first->next!=last){
cur=first;
tmp=first->next;
first->next=last->next;
last->next=NULL;
first=tmp;
while(first){
tmp=first;
first=first->next;
delete tmp;
}
first=cur;
last=cur->next;
}else{
first=first->next;
last=last->next;
}
}
return pHead;
}
};