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

29. 删除链表中重复的节点

时间:2020-02-13 17:31:16      阅读:74      评论:0      收藏:0      [点我收藏+]

标签:div   重复节点   ret   src   头结点   image   info   http   for   

可能会把头结点删掉的问题,都会定义一个虚拟头节点

技术图片

 

 

 技术图片

 

 

 

p:上一次保留节点的最后一个位置
q:下一段的第一个节点,用来把下一段全部扫描结束  ,只要相同q就一直向后走。p到q为一段

本次用来3个节点,一个虚拟节点,另外的p、q用来遍历是否存在重复节点。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
 /***采用了虚拟头结点,此外的p\q两个节点用来遍历重复的结点          ****/
class Solution {
public:
    ListNode* deleteDuplication(ListNode* head) {
        auto dummy =new ListNode(-1);
        dummy->next = head;
        
        auto p = dummy;
        while(p->next){    //p:上一次保留节点的最后一个位置
            auto q = p->next;  //下一段的第一个节点,用来把下一段全部扫描结束,注:p到q为一段        
            while(q && p->next->val == q->val ) q = q->next;
        
        if(p->next->next == q)//当前段不存在重复的结点
            p = p->next;
        else p->next = q;
        }
        return dummy->next;
    }
};

 

29. 删除链表中重复的节点

标签:div   重复节点   ret   src   头结点   image   info   http   for   

原文地址:https://www.cnblogs.com/make-big-money/p/12303836.html

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