刪除鏈表中重復的節點
阿新 • • 發佈:2017-12-22
處理 desc true -i public 排序 false 一個 遍歷
題目描述
在一個排序的鏈表中,存在重復的結點,請刪除該鏈表中重復的結點,重復的結點不保留,返回鏈表頭指針。 例如,鏈表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; } };
刪除鏈表中重復的節點