In this task, I worked on removing duplicate elements from a sorted linked list.
Since the list is already sorted, duplicate values will always appear next to each other.
What I Did
I created a function removeDuplicates that:
- Takes the head of a linked list
- Removes duplicate nodes
- Returns the modified list with only unique elements
How I Solved It
Instead of using extra space , I used a simple pointer traversal.
Approach
I used one pointer:
-
curr→ starts from the head and traverses the list
Logic Behind It
At each step:
- Compare the current node with the next node
-
If both values are the same:
- Skip the next node →
curr.next = curr.next.next
- Skip the next node →
-
Otherwise:
- Move to the next node →
curr = curr.next
- Move to the next node →
Code
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def removeDuplicates(head):
curr = head
while curr and curr.next:
if curr.val == curr.next.val:
curr.next = curr.next.next
else:
curr = curr.next
return head
How It Works
Because the list is sorted:
- All duplicates are adjacent
- So we only need to compare neighboring nodes
When a duplicate is found, we simply bypass it, effectively removing it from the list.
Time Complexity
- O(n) → traverse the list once
Space Complexity
- O(1) → no extra space used
Example
Original:
1 → 1 → 2 → 3 → 3 → 4 → None
After removing duplicates:
1 → 2 → 3 → 4 → None
Top comments (0)