Niuke.com Jianzhi ofrece eliminar nodos duplicados en la lista vinculada

Tema Descripción

En una lista enlazada ordenada, hay nodos duplicados, elimine los nodos duplicados en la lista enlazada, los nodos duplicados no se conservan y devuelva el puntero del encabezado de la lista enlazada. Por ejemplo, la lista enlazada 1->2->3->3->4->4->5 se procesa como 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;
    }
};

Supongo que te gusta

Origin blog.csdn.net/yhn19951008/article/details/79433728
Recomendado
Clasificación