Problem

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

Example
Given 1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return 2->3.

思路

  • 需要加入dummy node
    • 因为头节点可能会被删除, 程序也有可能返回null.
  • if we found current node's value equals its next node's value, we iteratively delete cur node.
  • because we want to delete current node, we need a variable to record the its value.
    /*
        d - 1 - 1 - 1 - 2 - 3
        p   c1   
            r
                c2
                    c3
        d - 2 - 3            
        p   c1

        if c.val = c.next.val                
            c != null && c.val == r
                delete c
        else

    */

    public static ListNode deleteDuplicates(ListNode head) {
        ListNode dummy = new ListNode(0);
        dummy.next = head;

        ListNode prev = dummy;
        ListNode curt = head;

        while (curt != null && curt.next != null) {
            if (curt.val == curt.next.val) {
                int dup = curt.val;
                while (curt != null && curt.val == dup) {
                    prev.next = curt.next;
                    curt  = curt.next;
                }
            } else {
                prev = curt;
                curt = curt.next;
            }
        }
        return dummy.next;
    }

results matching ""

    No results matching ""