82. Remove Duplicates from Sorted List II

Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.

For example,
Given1->2->3->3->4->4->5, return1->2->5.
Given1->1->1->2->3, return2->3.

思路:仍然是双指针,但是由于head可能被删掉,所以需要一个dummy head开头。精妙之处在于遇到block要跳过

public class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        ListNode newHead = new ListNode(0);
        newHead.next = head;
        ListNode prev = newHead;
        ListNode curr = head;

        while(curr!=null){
            //move a block
            while(curr.next!=null&&curr.val==curr.next.val){
                curr = curr.next;
            }
            if (prev.next==curr){
                prev = curr;
            }else{
                prev.next = curr.next;
            }
            curr = curr.next;
        }

        return newHead.next;
    }
}

results matching ""

    No results matching ""