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

删除链表中重复的结点

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

O(n)时间复杂度实现链表重复节点删除问题
技巧:伪头结点、两层循环、判断是否找到了重复节点

class Solution {
public:
    ListNode* deleteDuplication(ListNode* pHead) {
        // 1 2 3 3 4 4 5
        ListNode *yummyhead = new ListNode(-1);
        yummyhead->next = pHead;
        ListNode *pre = yummyhead;
        ListNode *post;

        while (pHead)
        {
            post = pHead->next;  // post要放在这里赋值,而不能放在循环体末尾赋值,是因为pHead可能为空
            // 寻找不重复的结点
            while (post && pHead->val == post->val) {
                post = post->next;
            }
            // 找到下一个不重复结点
            // 需要判断是否找到了重复结点,这里明显是没找到啊
            if (pHead->next == post) {
                pre = pHead;
            } else {
                pre->next = post;
            }
            pHead = post;  
        }
        return yummyhead->next;
    }
};
全部评论

相关推荐

用微笑面对困难:不是你千万别小看这家公司,他们的预估市值成倍上涨,三次在报告看见这个公司了,总之如果是给股权的话可以试试,未来没准真能发家致富哈哈哈哈
点赞 评论 收藏
分享
亲爱滴达瓦里氏:又有嵌软又有FPGA又有硬件的,三个方向显得你的简历太杂糅了,展示不出你在某一个方向有哪些技术栈。基本上也不会有企业会去招一个本科的全栈工程师。HR一般是看你的技术栈是否和招聘要求匹配才发面试的。如果你想三个方向都试试的话还是建议你分成三份不同的简历根据不同岗位来投。多看看****或牛客上面的招聘信息,根据上面要求的技术栈来写简历。看了你的帖子经历这一块还是过关的,不过看的每个方向都会一点,但每个方向优势都不突出。 还有就是要海投,你这才几十份算不了啥。去年投了一两百份的大有人在。多去跑跑线下招聘吧,有机会继续搞份实习,后面转正机会大些。有条件就多往北上广深投吧。武汉竞争还是太激烈了。
我的秋招日记
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务