题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
思路:两个指针一前一后,遍历找重复节点,特殊情况考虑重复的节点是头节点
class Solution { public: ListNode* deleteDuplication(ListNode* pHead) { ListNode *pre=NULL; ListNode *cur=pHead; while(cur) { ListNode *pNext=cur->next; bool needDelete=false; if(pNext && pNext->val==cur->val)needDelete=true; if(needDelete)//如果需要删除 { int val=cur->val; while(cur && cur->val==val)//遍历删除 { pNext=cur->next; delete cur; cur=pNext; } if(pre==NULL)pHead=cur;//如果重复的是头节点即pre==NULL,则重置头节点 else pre->next=cur;//pre->next指向第一个不重复的节点 }else{ pre=cur; cur=cur->next; } } return pHead; } };