#include <iostream>
#include <set>
using namespace std;
struct Node{
int data;
Node* next;
};
set<int> hashmap;
Node* head = NULL;
void deldups()
{
Node* prev = NULL;
Node* curr = head;
while (curr != NULL)
{
int val = curr->data;
if (!hashmap.insert(val).second)
{
prev->next = curr->next;
delete curr;
}
else
{
prev = curr;
}
curr = prev->next;
}
}
void print()
{
Node* temp = head;
while (temp != NULL)
{
cout << temp->data << " ";
temp = temp->next;
}
cout << endl;
}
int main()
{
Node* firstnode = new Node();
head = firstnode;
firstnode->data = 5;
Node* secondnode = new Node();
firstnode->next = secondnode;
secondnode->data = 6;
Node* thirdnode = new Node();
secondnode->next = thirdnode;
thirdnode->data = 7;
Node* forthnode = new Node();
thirdnode->next = forthnode;
forthnode->data = 5;
Node* fifthnode = new Node();
forthnode->next = fifthnode;
fifthnode->data = 9;
fifthnode->next = NULL;
cout << "before: "; print();
deldups();
cout << "after: "; print();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c2V0PgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBOb2RlewogICAgaW50IGRhdGE7CiAgICBOb2RlKiBuZXh0Owp9OwoKc2V0PGludD4gaGFzaG1hcDsKTm9kZSogaGVhZCA9IE5VTEw7Cgp2b2lkIGRlbGR1cHMoKQp7CiAgICBOb2RlKiBwcmV2ID0gTlVMTDsKICAgIE5vZGUqIGN1cnIgPSBoZWFkOwogICAgCiAgICB3aGlsZSAoY3VyciAhPSBOVUxMKQogICAgewogICAgICAgIGludCB2YWwgPSBjdXJyLT5kYXRhOwogICAgICAgIGlmICghaGFzaG1hcC5pbnNlcnQodmFsKS5zZWNvbmQpCiAgICAgICAgewogICAgICAgICAgICBwcmV2LT5uZXh0ID0gY3Vyci0+bmV4dDsKICAgICAgICAgICAgZGVsZXRlIGN1cnI7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIHByZXYgPSBjdXJyOwogICAgICAgIH0KICAgICAgICBjdXJyID0gcHJldi0+bmV4dDsKICAgIH0KfQoKdm9pZCBwcmludCgpCnsKICAgIE5vZGUqIHRlbXAgPSBoZWFkOwogICAgd2hpbGUgKHRlbXAgIT0gTlVMTCkKICAgIHsKICAgICAgICBjb3V0IDw8IHRlbXAtPmRhdGEgPDwgIiAiOwogICAgICAgIHRlbXAgPSB0ZW1wLT5uZXh0OwogICAgfQogICAgY291dCA8PCBlbmRsOwp9CgppbnQgbWFpbigpIAp7CiAgICBOb2RlKiBmaXJzdG5vZGUgPSBuZXcgTm9kZSgpOwogICAgaGVhZCA9IGZpcnN0bm9kZTsKICAgIGZpcnN0bm9kZS0+ZGF0YSA9IDU7CgogICAgTm9kZSogc2Vjb25kbm9kZSA9IG5ldyBOb2RlKCk7CiAgICBmaXJzdG5vZGUtPm5leHQgPSBzZWNvbmRub2RlOwogICAgc2Vjb25kbm9kZS0+ZGF0YSA9IDY7CgogICAgTm9kZSogdGhpcmRub2RlID0gbmV3IE5vZGUoKTsKICAgIHNlY29uZG5vZGUtPm5leHQgPSB0aGlyZG5vZGU7CiAgICB0aGlyZG5vZGUtPmRhdGEgPSA3OwoKICAgIE5vZGUqIGZvcnRobm9kZSA9IG5ldyBOb2RlKCk7CiAgICB0aGlyZG5vZGUtPm5leHQgPSBmb3J0aG5vZGU7CiAgICBmb3J0aG5vZGUtPmRhdGEgPSA1OwoKICAgIE5vZGUqIGZpZnRobm9kZSA9IG5ldyBOb2RlKCk7CiAgICBmb3J0aG5vZGUtPm5leHQgPSBmaWZ0aG5vZGU7CiAgICBmaWZ0aG5vZGUtPmRhdGEgPSA5OwogICAgZmlmdGhub2RlLT5uZXh0ID0gTlVMTDsKICAgIAogICAgY291dCA8PCAiYmVmb3JlOiAiOyBwcmludCgpOwogICAgZGVsZHVwcygpOwogICAgY291dCA8PCAiYWZ0ZXI6ICI7IHByaW50KCk7CgogICAgcmV0dXJuIDA7Cn0=