82.Remove Duplicates from Sorted List II

82. Remove Duplicates from Sorted List II

題目

給出一個有序鏈表,刪掉有重複數字的所有節點,只保留原列表中不同的數字。
例如:
給出:1->2->3->3->4->4->5, 返回1->2->5.
給出: 1->1->1->2->3, 返回 2->3.

代碼塊

public class Solution {
    public  static ListNode deleteDuplicates(ListNode head){
        if(head == null) return null;
        ListNode fakeHead = new ListNode(0);
        fakeHead.next = head;
        ListNode left = fakeHead;
        ListNode right = head;
        while(right != null){
            while(right.next != null && right.val == right.next.val){
                right = right.next;
            }
            if(left.next == right){
                left = right;
            }else{
                left.next = right.next;
            }
            right = right.next;
        }
        return fakeHead.next;
    }

}

這是實現函數。

    public static void print(ListNode head){
        while(head != null){
            System.out.println(head.val);
            head = head.next;
        }
    }

這是打印函數。

代碼分析

這道題目比 I ,是要刪除所有重複的元素,思路大體不變,如果遇到重複的元素,將right右移,直到指向最後一個不重複的元素。此時進行判斷,left如果指向的元素如果等於right,就左右移動到同位置;否則,左右同時後移。
第一遍,背下來,慢慢理解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章