#include <iostream>
using namespace std;
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) {}
};
ListNode* cloneList(ListNode* head) {
ListNode *prev = new ListNode(head->val);
head = head->next;
while (head != NULL)
{
ListNode *p = new ListNode(head->val, prev);
head = head->next;
prev = p;
}
return prev;
}
void printList(ListNode* head) {
while (head)
{
cout << head->val << " ";
head = head->next;
}
cout << "\n";
}
void freeList(ListNode* head) {
while (head)
{
ListNode *n = head->next;
delete head;
head = n;
}
}
int main() {
ListNode *head = nullptr;
ListNode **ptr = &head;
for(int i = 1; i <= 5; ++i)
{
*ptr = new ListNode(i);
ptr = &((*ptr)->next);
}
printList(head);
ListNode *clone = cloneList(head);
printList(clone);
freeList(head);
freeList(clone);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IExpc3ROb2RlCnsKICAgIGludCB2YWw7CiAgICBMaXN0Tm9kZSAqbmV4dDsKICAgIExpc3ROb2RlKCkgOiB2YWwoMCksIG5leHQobnVsbHB0cikge30KICAgIExpc3ROb2RlKGludCB4KSA6IHZhbCh4KSwgbmV4dChudWxscHRyKSB7fQogICAgTGlzdE5vZGUoaW50IHgsIExpc3ROb2RlICpuZXh0KSA6IHZhbCh4KSwgbmV4dChuZXh0KSB7fQp9OwoKTGlzdE5vZGUqIGNsb25lTGlzdChMaXN0Tm9kZSogaGVhZCkgewoJTGlzdE5vZGUgKnByZXYgPSBuZXcgTGlzdE5vZGUoaGVhZC0+dmFsKTsKCWhlYWQgPSBoZWFkLT5uZXh0OwoJd2hpbGUgKGhlYWQgIT0gTlVMTCkKCXsKCQlMaXN0Tm9kZSAqcCA9IG5ldyBMaXN0Tm9kZShoZWFkLT52YWwsIHByZXYpOwoJCWhlYWQgPSBoZWFkLT5uZXh0OwoJCXByZXYgPSBwOwoJfQoJcmV0dXJuIHByZXY7Cn0KCnZvaWQgcHJpbnRMaXN0KExpc3ROb2RlKiBoZWFkKSB7Cgl3aGlsZSAoaGVhZCkKCXsKCQljb3V0IDw8IGhlYWQtPnZhbCA8PCAiICI7CgkJaGVhZCA9IGhlYWQtPm5leHQ7Cgl9Cgljb3V0IDw8ICJcbiI7Cn0KCnZvaWQgZnJlZUxpc3QoTGlzdE5vZGUqIGhlYWQpIHsKCXdoaWxlIChoZWFkKQoJewoJCUxpc3ROb2RlICpuID0gaGVhZC0+bmV4dDsKCQlkZWxldGUgaGVhZDsKCQloZWFkID0gbjsKCX0KfQoKaW50IG1haW4oKSB7CgoJTGlzdE5vZGUgKmhlYWQgPSBudWxscHRyOwoJTGlzdE5vZGUgKipwdHIgPSAmaGVhZDsKCWZvcihpbnQgaSA9IDE7IGkgPD0gNTsgKytpKQoJewoJCSpwdHIgPSBuZXcgTGlzdE5vZGUoaSk7CgkJcHRyID0gJigoKnB0ciktPm5leHQpOwoJfQoKCXByaW50TGlzdChoZWFkKTsKCglMaXN0Tm9kZSAqY2xvbmUgPSBjbG9uZUxpc3QoaGVhZCk7CgoJcHJpbnRMaXN0KGNsb25lKTsKCglmcmVlTGlzdChoZWFkKTsKCWZyZWVMaXN0KGNsb25lKTsKCXJldHVybiAwOwp9