题解 | #删除链表中重复的结点#

删除链表中重复的结点

https://www.nowcoder.com/practice/fc533c45b73a41b0b44ccba763f866ef

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
        val(x), next(NULL) {
    }
};
*/
class Solution {
public:
    ListNode* deleteDuplication(ListNode* pHead) {
        if (pHead == nullptr)
            return nullptr;
        
        ListNode *dummyNode = new ListNode(0);
        dummyNode->next = pHead;
        ListNode *pPreNode = dummyNode;
        ListNode *pNode = pHead;
        ListNode *pNext = nullptr;
        
        while (pNode != nullptr && pNode->next != nullptr) {

            int val = pNode->val;
            pNext = pNode->next;

            bool needDeleted = false;
            if (pNode->val == pNext->val)
                needDeleted = true;
            
            if (!needDeleted) {
                pPreNode = pNode;
                pNode = pNode->next;
                continue;
            }
            else {
                ListNode *pToDel = pNode;
                while (pNode != nullptr && pNode->val == val) {
                    pNext = pNode->next;
                    delete pNode;
                    pNode = pNext;
                }
                pPreNode->next = pNext;
            }

        }

        ListNode *result = dummyNode->next;
        delete dummyNode;
        return result;
    }
};

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务