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:
[0, 300].-100 <= Node.val <= 100import { 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 }