删除链表中重复的结点

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)。

posted on 2019-03-05 13:26  q2013  阅读(115)  评论(0编辑  收藏  举报

导航