删除链表中重复的结点

Posted hesper

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了删除链表中重复的结点相关的知识,希望对你有一定的参考价值。

删除链表中重复的结点

题目描述

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5

待整理

class Solution {
public:
    ListNode* deleteDuplication(ListNode* pHead)
    {
        if (nullptr == pHead) 
            return nullptr;
        ListNode *pPreNode = nullptr;
        ListNode *pNode = pHead;
        while(nullptr != pNode) {
            ListNode *pNext = pNode->next;
            bool needDelete = false;
            if ((nullptr != pNext) && (pNode->val == pNext->val)) {
                needDelete = true;
            }
            if (!needDelete) {    // 不需要删除
                pPreNode = pNode;
                pNode = pNode->next;
            }
            else {            // 需要删除
                int val = pNode->val;
                ListNode *pToBeDel = pNode;
                while ((nullptr != pToBeDel) && (pToBeDel->val == val)) {
                    pNext = pToBeDel->next;
                    
                    delete pToBeDel;
                    pToBeDel = nullptr;
                    pToBeDel = pNext;
                }
                if (pPreNode == nullptr) {
                    pHead = pNext;
                }
                else {
                    pPreNode->next = pNext;
                }
                pNode = pNext;
            }
        }
        return pHead;
    }
};
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
        val(x), next(NULL) {
    }
};

以上是关于删除链表中重复的结点的主要内容,如果未能解决你的问题,请参考以下文章

《剑指offer》:[57]删除链表中重复的结点

算法入门15删除链表中重复的结点

链表例题1:删除链表中的重复结点

删除链表中重复的结点

删除链表中重复的结点

删除链表中重复的节点