码迷,mamicode.com
首页 > 其他好文 > 详细

删除链表中重复的结点

时间:2019-03-15 14:41:29      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:terminal   dde   存在   public   lis   lse   nullptr   ref   struct   

删除链表中重复的结点

题目描述

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表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) {
    }
};

删除链表中重复的结点

标签:terminal   dde   存在   public   lis   lse   nullptr   ref   struct   

原文地址:https://www.cnblogs.com/hesper/p/10536610.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!