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:

  • 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.




 # 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: Optional[ListNode]) -> Optional[ListNode]:

        if not head: # no element
            return head

        elif head.next == None: # 1 element
            return head

        elif head.next.next == None: # 2 elements
            if head.val == head.next.val:
                return None
            else:
                return head


        prev = head
        s_head = ListNode(0, prev)
        old = s_head
        node = prev.next
        delete = False

        while node:
            if prev.val == node.val:
                delete = True
                node = node.next

                if node == None:
                    old.next = None

            else:
                if delete:
                    old.next = node
                    prev = node
                    node = node.next
                    delete = False
                else:
                    old = prev
                    prev = node
                    node = node.next

        return s_head.next

Random Note


Started keeping online notes!