Remove Duplicates from Sorted List II

和I 比起来其实很不一样,反而很类似于linkedlist reverse,不断的看pre.next的东西,我自己想了好久,开始用三个指针,完全糊涂,还是退回到原来的code,才明了

public class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        if(head==null||head.next==null) return head;
        ListNode h = new ListNode(-1);
        h.next = head;
        ListNode pre = h, cur = head; // 以cur 进行移动, pre 贯穿了弄好的list
        // 这里非常容易糊涂,看了自己以前的code才明白,不推荐什么flg,三个指针一起走
        while(cur!=null){
            while(cur.next!=null && pre.next.val==cur.next.val){
                cur =cur.next;
            }
            if(pre.next == cur) // node 相同,说明cur 没挪窝,也就是说要么cur.next==null || cur.next和cur的值不等
                {pre = pre.next;} // OK的cur编入pre的串里,这里 pre.next指向的node并不一定能编入pre的list里,见下行
            else
                {pre.next = cur.next;} // 没有判断好pre.next是否和后面的重复,所以在这里只是先把它“指向”要判断的位置
            cur = cur.next;
        }
        return h.next;
    }
}

 

posted @ 2015-04-08 10:22  世界到处都是小星星  阅读(77)  评论(0编辑  收藏  举报