题解 | #删除有序链表中重复的元素-II#

删除有序链表中重复的元素-II

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

  • 设置头节点方便处理

  • 双指针,pre指向已处理好的链表的最后一个节点,p指向当前要判断的节点

  • while循环遍历链表,停止条件是p为空或p->next为空

  • 当当前节点与下一节点相等时,while循环找到与当前节点不等的节点tmp,将pre指向tmp,当前节点更新为tmp,继续判断当前节点是否为重复节点

  • 当当前节点与下一节点不等时,pre和p同时前进一位即可

class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        // write code here
        ListNode* vhead = new ListNode(-1);
        vhead->next = head;
        ListNode* p = head;
        ListNode* pre = vhead;
        while(p && p->next){
            if(p->val == p->next->val){
                ListNode* tmp = p->next;
                while(tmp && tmp->val == p->val){
                    tmp = tmp->next;
                }
                pre->next = tmp;
                p = tmp;
                
            }else{
                pre = pre->next;
                p = p->next;
            }
        }
        return vhead->next;
    }
};
全部评论

相关推荐

不愿透露姓名的神秘牛友
02-12 10:05
小米集团 算法工程师 28.0k*15.0
泡沫灬一触即破:楼上那个看来是看人拿高薪,自己又不如意搁这泄愤呢是吧,看你过往评论很难不怀疑你的精神状态
点赞 评论 收藏
分享
头发暂时没有的KFC总裁:找廉价劳动力罢了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务