#include <iostream>
#include <unordered_set>
using namespace std;
struct Node {
int data;
Node* next;
};
void removeDuplicates(Node* head) {
unordered_set<int> seen;
Node* curr = head;
Node* prev = nullptr;
while (curr != nullptr) {
if (seen.count(curr->data) > 0) {
prev->next = curr->next;
delete curr;
} else {
seen.insert(curr->data);
prev = curr;
}
curr = prev->next;
}
}
int main() {
Node* head = new Node{3, new Node{2, new Node{3, new Node{2, new Node{4, nullptr}}}}};
removeDuplicates(head);
while (head != nullptr) {
cout << head->data << " ";
head = head->next;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBOb2RlIHsKICAgIGludCBkYXRhOwogICAgTm9kZSogbmV4dDsKfTsKCnZvaWQgcmVtb3ZlRHVwbGljYXRlcyhOb2RlKiBoZWFkKSB7CiAgICB1bm9yZGVyZWRfc2V0PGludD4gc2VlbjsKICAgIE5vZGUqIGN1cnIgPSBoZWFkOwogICAgTm9kZSogcHJldiA9IG51bGxwdHI7CgogICAgd2hpbGUgKGN1cnIgIT0gbnVsbHB0cikgewogICAgICAgIGlmIChzZWVuLmNvdW50KGN1cnItPmRhdGEpID4gMCkgewogICAgICAgICAgICBwcmV2LT5uZXh0ID0gY3Vyci0+bmV4dDsKICAgICAgICAgICAgZGVsZXRlIGN1cnI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2Vlbi5pbnNlcnQoY3Vyci0+ZGF0YSk7CiAgICAgICAgICAgIHByZXYgPSBjdXJyOwogICAgICAgIH0KICAgICAgICBjdXJyID0gcHJldi0+bmV4dDsKICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICBOb2RlKiBoZWFkID0gbmV3IE5vZGV7MywgbmV3IE5vZGV7MiwgbmV3IE5vZGV7MywgbmV3IE5vZGV7MiwgbmV3IE5vZGV7NCwgbnVsbHB0cn19fX19OwogICAgcmVtb3ZlRHVwbGljYXRlcyhoZWFkKTsKICAgIHdoaWxlIChoZWFkICE9IG51bGxwdHIpIHsKICAgICAgICBjb3V0IDw8IGhlYWQtPmRhdGEgPDwgIiAiOwogICAgICAgIGhlYWQgPSBoZWFkLT5uZXh0OwogICAgfQogICAgcmV0dXJuIDA7Cn0=