1. 程式人生 > >劍指offer____刪除連結串列中重複的節點

劍指offer____刪除連結串列中重複的節點

在一個排序的連結串列中,存在重複的結點,請刪除該連結串列中重複的結點,重複的結點不保留,返回連結串列頭指標。 例如,連結串列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)
    {
        ListNode* pNew= new ListNode(0);
        ListNode* pTmp=pNew;
        ListNode* pCur=pHead;
        ListNode* pDel=NULL;
         
        while(pCur){
            if(pCur->next != NULL && pCur->val == pCur->next->val){
                pDel = pCur;
                ListNode* pNext = pCur->next;
                delete pDel;
                while(pNext->next != NULL && pNext->val == pNext->next->val){
                    pDel = pNext;
                    pNext = pNext->next;
                    delete pDel;
                }
                pDel = pNext;
                pCur = pNext->next;
                delete pDel;
            }
            else{
                pTmp->next = pCur;
                pTmp = pTmp->next;
                pCur = pCur->next;
            }
        }
         
        pTmp->next = NULL;
         
        return pNew->next;
       
    }
};