刪除鏈表中的重複結點 Apare_xzc

排序鏈表去重

2020.7.5

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
        val(x), next(NULL) {
    }
};
*/
class Solution {
public:
    ListNode* deleteDuplication(ListNode* pHead)
    {
        ListNode * p = pHead;
        ListNode * t, *q;
        if(!p||(p&&!p->next)) return pHead;
        t = p->next;
        while(t) {
            if(t->val!=p->val) p = p->next,t=t->next;
            else {
                p->next = t->next;
                delete t;
                t = p->next;
            }
        }
        return pHead;
    }
    //1->2->3->3->4->4->5
    //變成
    //1->2->3->4->5
};

刪除重複的結點
遞歸實現,每次刪除開頭重複的所有結點

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 * p = pHead;
        ListNode * t, *q;
        if(!p||(p&&!p->next)) return pHead; //空表或者只有一個元素
        t = p->next;
        if(p->val!=t->val) {
            p->next = deleteDuplication(t);
            return pHead;
        }
        int val = p->val;
        while(p) {
            if(p->val==val) {
                pHead = p->next;
                delete p;
                p = pHead;
            }
            else {
                pHead = deleteDuplication(pHead);
                return pHead;
            }
        }
        return nullptr;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章