首页 > 其他 > 详细

删除链表中重复的结点

时间:2019-03-05 13:41:09      阅读:167      评论:0      收藏:0      [点我收藏+]

public class Solution {
    public ListNode deleteDuplication(ListNode pHead)
    {
        if(pHead == null || pHead.next == null) return pHead;//特殊情况
        else {
            ListNode p1 = pHead;
            ListNode p = new ListNode(-1);//新建头节点,指向符合条件的链表末尾
            p.next = p1;
            while(p1.next != null){ 
                if(p1.val == p1.next.val){ 
                    int i = p1.val;                  //记录下来 防止有多个相同值
                    while(p1.val == i){
                        p1 = p1.next;
                        if(p1 == null){   //到末尾说明尾部都要删掉
                            p.next = null;
                            if(pHead.val == i) return null;      //全都是一个值的情况
                            else return pHead;
                        }
                    }
                    p.next = p1;
                    if(pHead.val == i) {  //开头重复的情况
                     pHead = p1;
                    }
                }
                else{
                    p = p1;
                    p1 = p1.next;
                }
            }
            return pHead;
           
        }

    }
}

之前用p1,p2两个结点,后发现复杂改为一个结点,但时间反而用得多了(20ms vs 31ms)。

删除链表中重复的结点

原文:https://www.cnblogs.com/dyq19/p/10476136.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!