Niuke.com Jianzhi は、リンクされたリスト内の重複ノードを削除します

トピックの説明

ソートされたリンク リストに重複ノードがあります。リンク リスト内の重複ノードを削除してください。重複ノードは保持されず、リンク リスト ヘッド ポインタを返します。たとえば、リンクされたリスト 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 *pPreHead = new ListNode(0), *p = pHead, *pPre = pPreHead, *tp;
        pPreHead->next = pHead;
        while (p != nullptr && p->next != nullptr)
        {
            if (p->val == p->next->val)
            {
                int d = p->val;
                while (p != nullptr && p->val == d)
                {
                    tp = p;
                    pPre->next = p->next;
                    p = p->next;
                    delete tp;
                }
            }
            else
            {
                pPre = p;
                p = p->next;
            }
        }
        p = pPreHead->next;
        delete pPreHead;
        return p;
    }
};

おすすめ

転載: blog.csdn.net/yhn19951008/article/details/79433728