https://leetcode.com/problems/remove-duplicates-from-sorted-list-ii/description/?envType=study-plan-v2&envId=top-interview-150

def deleteDuplicates(self, head: Optional[ListNode]) -> Optional[ListNode]:
  if not head: return head
  
  # create sentinel node
  dummy = ListNode(0, head)

  # prev_node, curr_node, next_node = dummy, head, head.next
  prev_node, curr_node = dummy, head

  while curr_node:
      # if the current node's next exists and its current value
      # is equal to its next value
      if curr_node.next and curr_node.val == curr_node.next.val:
          # while current node's next exists and its current value equals its
          # next value, move current node forward
          while curr_node.next and curr_node.val == curr_node.next.val:
              curr_node = curr_node.next

          # set prev node's next to be curr_node's next
          # meaning you skip the non unique sublist completely
          prev_node.next = curr_node.next
      # if current node and its next node have different values
      else:
          # we move a unique value so move prev forward
          # prev being at a node ensures that that node is unique
          prev_node = prev_node.next
      
      # move curr forward to continue processing
      curr_node = curr_node.next
      
  return dummy.next