LeetCode – Remove Duplicates from Sorted List II (Java)

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

For example, given 1->1->1->2->3, return 2->3.

Java Solution

public ListNode deleteDuplicates(ListNode head) {
    ListNode t = new ListNode(0);
    t.next = head;
 
    ListNode p = t;
    while(p.next!=null&&p.next.next!=null){
        if(p.next.val == p.next.next.val){
            int dup = p.next.val;
            while(p.next!=null&&p.next.val==dup){
                p.next = p.next.next;
            }
        }else{
            p=p.next;
        }
 
    }
 
    return t.next;
}
Category >> Algorithms >> Interview  
If you want someone to read your code, please put the code inside <pre><code> and </code></pre> tags. For example:
<pre><code> 
String foo = "bar";
</code></pre>
  • Aditya Vutukuri

    There is bug in here. This just removes even number of nodes. Try example:
    1->1->1->2->3 and it fails.

    Fix do if (previous.data == current.data) in a while loop .

  • Ankit Shah

    not sure why formatting doesn’t work, this is a better solution with just one for loop

  • Ankit Shah

    public ListNode removeduplicate(ListNode head) {

    if (head == null || head.next == null)
    return head;

    ListNode previous = head;
    ListNode current = head.next;
    ListNode tmp;

    while (current != null) {
    tmp = current.next;
    if (previous.data == current.data) {
    if (previous == head) {
    head = tmp;
    }
    previous = tmp;
    current = tmp.next;
    } else {
    previous = current;
    current = tmp;
    }
    }

    return head;
    }