Algorithm to Remove Duplicates in Linked List using Hash Set


Given a singly linked list node, remove nodes with duplicate values while maintaining relative order of the original list.

Constraints
n ≤ 100,000 where n is the number of nodes in node

Example 1:
Input: 1 – 1 – 2 – 2
Output: 1 – 2

Example 2:
Input: 0 – 0 – 0
Output 0

How to Remove Duplicates in Linked List?

We can use O(N) hash set to achieve O(1) insert and lookup. We need to keep a previous pointer, and if a node has been inserted into the hash set before, we need to skip the node.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
 * class LLNode {
 *     public:
 *         int val;
 *         LLNode *next;
 * };
 */
LLNode* removeDuplicatesLinkedList(LLNode* node) {
    unordered_set<int> vis;
    LLNode* dummy = new LLNode(-1);
    dummy->next = node;
    LLNode* prev = dummy;
    while (node) {
        if (vis.count(node->val)) {
            prev->next = node->next;
        } else {
            vis.insert(node->val);
            prev = node;
        }
        node = prev->next;
    }
    return dummy->next;
}
/**
 * class LLNode {
 *     public:
 *         int val;
 *         LLNode *next;
 * };
 */
LLNode* removeDuplicatesLinkedList(LLNode* node) {
    unordered_set<int> vis;
    LLNode* dummy = new LLNode(-1);
    dummy->next = node;
    LLNode* prev = dummy;
    while (node) {
        if (vis.count(node->val)) {
            prev->next = node->next;
        } else {
            vis.insert(node->val);
            prev = node;
        }
        node = prev->next;
    }
    return dummy->next;
}

The space complexity is O(N), the time complexity is O(N) where N is the number of the nodes in the linked list. We use a dummy node to point to the head at the begining – which is to make the implementation a bit prettier without having to deal with the edge cases.

–EOF (The Ultimate Computing & Technology Blog)

GD Star Rating
loading...
297 words
Last Post: Teaching Kids Programming - Hexadecimal Numbers Conversion
Next Post: Complete an Arithmetic Sequence by Finding Missing Number

The Permanent URL is: Algorithm to Remove Duplicates in Linked List using Hash Set

Leave a Reply