head of a sorted linked list, delete all duplicates such that each element appears only once. Return the linked list sorted as well.
Input: head = [1,1,2] Output: [1,2]
Input: head = [1,1,2,3,3] Output: [1,2,3]
- The number of nodes in the list is in the range
-100 <= Node.val <= 100
- The list is guaranteed to be sorted in ascending order.
Have a dictionary to track the visited node values.
# 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: dummy = ListNode(0) dummy.next = head visited = set() while head and head.next: visited.add(head.val) while head.next and head.next.val in visited: head.next = head.next.next head = head.next return dummy.next
- Time Complexity: O(N).
- Space Complexity: O(N).