#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if(head == NULL) return NULL;
ListNode* first = head, *second = head;
// 1 -> 1 -> 2 -> 3 -> 3 -> NULL
if(head->next != NULL) second = head->next;
while(second != NULL) {
if(first->val == second->val) {
ListNode* temp = second;
second = second->next;
first->next = second;
delete temp;
if(second->next != NULL) {
second = second->next;
} else {
break;
}
} else {
first = first->next;
second = second->next;
}
}
return head;
}
};
int main()
{
// 1 -> 1 -> 2 -> 3 -> 3 -> NULL
ListNode* node = new ListNode(1);
ListNode* head = node;
node->next = new ListNode(1);
node->next->next = new ListNode(2);
// node->next->next->next = new ListNode(3);
// node->next->next->next->next = new ListNode(3);
Solution s;
s.deleteDuplicates(head);
while(head) {
cout << head->val << "->";
head = head->next;
}
cout << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IExpc3ROb2RlIHsKICAgIGludCB2YWw7CiAgICBMaXN0Tm9kZSAqbmV4dDsKICAgIExpc3ROb2RlKGludCB4KSA6IHZhbCh4KSwgbmV4dChOVUxMKSB7fQp9OwoKY2xhc3MgU29sdXRpb24gewpwdWJsaWM6CiAgICBMaXN0Tm9kZSogZGVsZXRlRHVwbGljYXRlcyhMaXN0Tm9kZSogaGVhZCkgewogICAgICAgIGlmKGhlYWQgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CiAgICAgICAgCiAgICAgICAgTGlzdE5vZGUqIGZpcnN0ID0gaGVhZCwgKnNlY29uZCA9IGhlYWQ7IAoJCS8vIDEgLT4gMSAtPiAyIC0+IDMgLT4gMyAtPiBOVUxMCiAgICAgICAgaWYoaGVhZC0+bmV4dCAhPSBOVUxMKSBzZWNvbmQgPSBoZWFkLT5uZXh0OwogICAgICAgIAogICAgICAgIHdoaWxlKHNlY29uZCAhPSBOVUxMKSB7CiAgICAgICAgICAgIGlmKGZpcnN0LT52YWwgPT0gc2Vjb25kLT52YWwpIHsKICAgICAgICAgICAgICAgIExpc3ROb2RlKiB0ZW1wID0gc2Vjb25kOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBzZWNvbmQgPSBzZWNvbmQtPm5leHQ7CiAgICAgICAgICAgICAgICBmaXJzdC0+bmV4dCA9IHNlY29uZDsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgZGVsZXRlIHRlbXA7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmKHNlY29uZC0+bmV4dCAhPSBOVUxMKSB7CgkJCQkgICAgc2Vjb25kID0gc2Vjb25kLT5uZXh0OwoJCQkJfSBlbHNlIHsKCQkJCSAgICBicmVhazsKCQkJCX0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGZpcnN0ID0gZmlyc3QtPm5leHQ7CiAgICAgICAgICAgICAgICBzZWNvbmQgPSBzZWNvbmQtPm5leHQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGhlYWQ7CiAgICB9Cn07CgoKaW50IG1haW4oKQp7CiAgICAvLyAxIC0+IDEgLT4gMiAtPiAzIC0+IDMgLT4gTlVMTAogICAgTGlzdE5vZGUqIG5vZGUgPSBuZXcgTGlzdE5vZGUoMSk7CiAgICBMaXN0Tm9kZSogaGVhZCA9IG5vZGU7CiAgICAKICAgIG5vZGUtPm5leHQgPSBuZXcgTGlzdE5vZGUoMSk7CiAgICBub2RlLT5uZXh0LT5uZXh0ID0gbmV3IExpc3ROb2RlKDIpOwogICAgLy8gbm9kZS0+bmV4dC0+bmV4dC0+bmV4dCA9IG5ldyBMaXN0Tm9kZSgzKTsKICAgIC8vIG5vZGUtPm5leHQtPm5leHQtPm5leHQtPm5leHQgPSBuZXcgTGlzdE5vZGUoMyk7CiAgICAKICAgIFNvbHV0aW9uIHM7CiAgICBzLmRlbGV0ZUR1cGxpY2F0ZXMoaGVhZCk7CiAgICAKICAgIHdoaWxlKGhlYWQpIHsKICAgICAgICBjb3V0IDw8IGhlYWQtPnZhbCA8PCAiLT4iOwogICAgICAgIAogICAgICAgIGhlYWQgPSBoZWFkLT5uZXh0OwogICAgfQogICAgY291dCA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9Cg==