题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
代码:
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
if(!pHead||!pHead->next)return pHead;
ListNode*head=new ListNode(-1);//添加一个头结点head
ListNode*pre=head,*cur=pHead;;//pre指向重复序列段的前置结点,cur指向当前结点
pre->next=pHead;
while(cur){
while(cur->next&&cur->next->val==pre->next->val)cur=cur->next;
if(pre->next!=cur){//cur不再pre后面,说明有重复,所以删除重复元素
pre->next=cur->next;
cur=pre->next;
}else{//没有重复,pre和cur都向后移一个结点
cur=cur->next;
pre=pre->next;
}
}
return head->next;
}
};