Skip to main content

Remove Duplicates from sorted Doubly Linked List

Problem Statement:​

Given a doubly linked list of n nodes sorted by values, the task is to remove duplicate nodes present in the linked list.

  • Example:

    Example 1:

    Input:
    n = 6
    1<->1<->1<->2<->3<->4
    Output:
    1<->2<->3<->4
    Explanation:
    Only the first occurance of node with value 1 is
    retained, rest nodes with value = 1 are deleted.
    Example 2:

    Input:
    n = 7
    1<->2<->2<->3<->3<->4<->4
    Output:
    1<->2<->3<->4
    Explanation:
    Only the first occurance of nodes with values 2,3 and 4 are
    retained, rest repeating nodes are deleted.


✅ Solution: Iterative In-Place Removal​

class Solution {
public:
Node* removeDuplicates(Node* head) {
if (head == NULL || head->next == NULL) return head;

Node* current = head->next;

while (current != NULL) {
if (current->data == current->prev->data) {
// Skip the current duplicate node
current->prev->next = current->next;
if (current->next != NULL)
current->next->prev = current->prev;
} else {
// Move forward only if no deletion occurred
// (otherwise current is already moved)
current = current->next;
}
}

return head;
}
};


📝 How It Works​

  • Start from the second node since we want to compare each node with its previous node.
  • If the current node’s value equals the previous one, it's a duplicate, so remove the current node by rewiring prev and next pointers.
  • If not a duplicate, move to the next node.
  • Repeat until the end of the list.

This works only because the doubly linked list is sorted in non-decreasing order.


🧩 Key Logic​

  • if (current->data == current->prev->data) → triggers removal.
  • Adjust both next and prev pointers to maintain DLL integrity.

⏱️ Time & Space Complexity​

MetricValue
TimeO(N)
SpaceO(1)

⚠️ Edge Cases​

  • Only one node → no duplicate to remove.
  • All elements are the same → only one remains.
  • Alternating duplicates → handles gracefully.

💡 Other Approaches​

ApproachTimeSpaceNotes
Hashing (for unsorted)O(N)O(N)Works even if not sorted
In-place (this one)O(N)O(1)Best for sorted list ✅

  • Remove Duplicates from Sorted Linked List (Singly)
  • Delete Nodes having Greater Value on Right
  • Remove all occurrences of duplicates
  • Remove Duplicates from Unsorted Linked List

🚀 Level Up Your Engineering Mindset

Never Study in Isolation. Join Binary Dose.

Connect with fellow engineers, clear conceptual doubts, and get 2 visual breakdowns & engineering mental models daily across our community channels.

Discord
Official Hub

Discord Community

Start at #welcome-and-rules, say hello in #general-chat, clear doubts, and collaborate with engineers worldwide.

Join Discord Server→
⚡
Daily Knowledge Drops

Daily Visual Deep-Dives

Bite-sized system design schematics, core OS internals, and DSA intuition served right into your feeds every single day.

💡Have handwritten notes, cheat-sheets, or want to publish a technical article?
Learn How to Contribute→