[LeetCode] Remove Duplicates From an Unsorted Linked List

1836. Remove Duplicates From an Unsorted Linked List

Given the head of a linked list, find all the values that appear more than once in the list and delete the nodes that have any of those values.

Return the linked list after the deletions.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicatesUnsorted(ListNode* head) {
unordered_map<int, int> mp;
ListNode* run = head;
while(run) {
mp[run->val]++;
run = run->next;
}
while(head && mp[head->val] != 1)
head = head->next;

run = head;

while(run && run->next) {
if(mp[run->next->val] == 1) run = run->next;
else run->next = run->next->next;
}


return head;
}
};
Author: Song Hayoung
Link: https://songhayoung.github.io/2022/04/10/PS/LeetCode/remove-duplicates-from-an-unsorted-linked-list/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.