【剑指offer】删除链表中的重复结点

删除链表中重复的结点

http://www.nowcoder.com/questionTerminal/fc533c45b73a41b0b44ccba763f866ef

这道题目看起来很简单,但是实际操作起来并不容易,尤其需要考虑头结点重复修改头结点
这里说一下思路:直接声明一个ListNode **p = pHead用于修改结点
p最初指向头结点,当头结点重复时可以通过*p直接修改头结点 不重复时可以通过p = &(xxx)修改其指向的结点

class Solution {
public:
    ListNode* deleteDuplication(ListNode* pHead)
    {
        ListNode *tmp;
        bool flag = false;
        ListNode **p = &pHead;
        if(!pHead)
            return NULL;
        while(*p){
            int val = (*p)->val;
            flag = false;
            tmp = (*p)->next;
            while(tmp && tmp->val == val){
                flag = true;
                tmp = tmp->next;
            }
            //发生了重复 修改当前指向的结点为后面第一个不是val的结点
            if(flag){
                *p = tmp;
            }
            //没发生重复 修改p指向原本结点的next结点
            else{
                p = &((*p)->next);
            }
        }
        return pHead;
    }
};
全部评论
那么多个题解,我只看懂了这个。小红要重新做什么样的人?
点赞 回复
分享
发布于 2020-02-28 20:43
原来节点的内存没有释放啊
点赞 回复
分享
发布于 2020-08-23 19:47
联易融
校招火热招聘中
官网直投
不懂就问,为什么这里要用二级指针,直接用指针无法修改?
点赞 回复
分享
发布于 2020-08-29 02:54

相关推荐

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