# 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) -> ListNode:
        if not head:
            return head 
        dummy = ListNode(0,head)
        
        pre,f = dummy,head
        while f:
            if f.next and f.val == f.next.val:
                # skip all duplicates
                while f.next and f.val == f.next.val:
                    f = f.next
                    #                                                     f
                pre.next = f.next # case1: f.next = None case 2: 333pre ->44
                # here pre did not choose to move forward, just try to point at posible next stop, which is f's next stop                                          
            else:
                pre = pre.next 
            f = f.next 
                
                
        return dummy.next