0082-remove-duplicates-from-sorted-list-ii

Try it on leetcode

Description

You are 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:

  • The number of nodes in the list is in the range [0, 300].
  • -100 <= Node.val <= 100
  • The list is guaranteed to be sorted in ascending order.

Solution(Python)

# Definition for singly-linked list.
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next
class Solution:
    def deleteDuplicates(self, head: ListNode | None) -> ListNode | None:
        # 
        sentinel = ListNode(0)
        sentinel.next = head
        cur = head
        prev = sentinel
        while cur:
            if cur.next and cur.val == cur.next.val:
                while cur.next and  cur.val == cur.next.val:
                     cur  =cur.next
                prev.next = cur.next
            else:
                prev = prev.next
            cur = cur.next
        return sentinel.next