【C++】19行双指针

删除有序链表中重复出现的元素

http://www.nowcoder.com/questionTerminal/71cef9f8b5564579bf7ed93fbe0b2024

class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        ListNode* res = new ListNode(0); //省去判断链表头重复的情况
        res->next = head;
        ListNode *pre = res, *cur = head; //记录前一个没重复的节点和当前节点
        while(cur && cur->next) { //后面元素少于2个则不会重复
            bool repeat = 0; //是否重复标志位
            while(cur->next && cur->next->val == pre->next->val) { //存在下一节点并且下一节点的值与pre后面的值(即接下来要判断是否重复的节点值)相同时
                repeat = 1; //设置标志位
                cur = cur->next; //当前节点前移直到重复节点的末尾
            }
            if(repeat) pre->next = cur->next; //当有重复时前一个没重复的节点指向末尾重复节点的下一位(可能为空指针)
            else pre = cur; //否则没重复节点前移
            cur = cur->next; //当前节点前移
        }
        return res->next;
    }
};
全部评论

相关推荐

点赞 评论 收藏
分享
但听说转正率很低,我现在有在实习了,好纠结要不要去
熬夜脱发码农:转正率低归低,但是实习的经历你可以拿着,又不是说秋招不准备了
点赞 评论 收藏
分享
05-26 22:25
门头沟学院 Java
Java小肖:不会是想叫你过去把你打一顿吧,哈哈哈
点赞 评论 收藏
分享
炫哥_:哥们项目描述里面vector和mysql之类的都要写吗,直接开头技术栈巴拉巴拉就行了,完全不是技术点啊
点赞 评论 收藏
分享
程序员小白条:你不是有一段实习了吗,现在找中大厂实习?过段时间要秋招了
我的简历长这样
点赞 评论 收藏
分享
评论
6
收藏
分享

创作者周榜

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