The solution is as follows:
class Solution:
def deleteDuplicates(self, head: Optional[ListNode]) -> Optional[ListNode]:
dummy = curr = ListNode(-1, head)
while curr:
if curr.next and curr.next.next and curr.next.val == curr.next.next.val:
dup = curr.next.val
while curr.next and curr.next.val == dup:
curr.next = curr.next.next
else:
curr = curr.next
return dummy.next
_ Time Complexity:
O(n) - We traverse all nodes within the linked list.
_ Space Complexity:
O(1) - We maintain pointers that occupy constant space.