LeetCode Top Interview 150

82. Remove Duplicates from Sorted List II

Medium

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

Example 1:

Input: head = [1,2,3,3,4,4,5]

Output: [1,2,5]

Example 2:

Input: head = [1,1,1,2,3]

Output: [2,3]

Constraints:

Solution

import { ListNode } from '../../com_github_leetcode/listnode'

/**
 * Definition for singly-linked list.
 * class ListNode {
 *     val: number
 *     next: ListNode | null
 *     constructor(val?: number, next?: ListNode | null) {
 *         this.val = (val===undefined ? 0 : val)
 *         this.next = (next===undefined ? null : next)
 *     }
 * }
 */
function deleteDuplicates(head: ListNode | null): ListNode | null {
    if (!head || !head.next) {
        return head
    }
    const dummy = new ListNode(0)
    dummy.next = head
    let prev: ListNode = dummy
    let curr: ListNode | null = head
    while (curr) {
        let hasDuplicate = false
        while (curr.next && curr.val === curr.next.val) {
            hasDuplicate = true
            curr = curr.next
        }
        if (hasDuplicate) {
            prev.next = curr.next
        } else {
            prev = prev.next!
        }
        curr = curr.next
    }
    return dummy.next
}

export { deleteDuplicates }