1. 程式人生 > >刪除鏈表中重復的節點

刪除鏈表中重復的節點

處理 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; } };

刪除鏈表中重復的節點