#include <iostream>
using namespace std;
struct List {
int value = 0;
List* next = nullptr;
List(int x) : value(x) {}
};
List* reverse(List* head) {
List* list = head;
List* new_head = list;
if (list->next != nullptr) {
list = reverse(list->next);
new_head = list;
while (list->next != nullptr) {
list = list->next;
}
list->next = head;
head->next = nullptr;
}
return new_head;
}
int main() {
List* head = new List(1);
List* list = head;
for (int index = 2; index < 10; index++) {
List* next = new List(index);
list->next = next;
list = next;
}
head = reverse(head);
while (head != nullptr) {
printf("%d\n", head->value);
head = head->next;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IExpc3QgewogaW50IHZhbHVlID0gMDsKIExpc3QqIG5leHQgPSBudWxscHRyOwogTGlzdChpbnQgeCkgOiB2YWx1ZSh4KSB7fQp9OwoKTGlzdCogcmV2ZXJzZShMaXN0KiBoZWFkKSB7CiAgTGlzdCogbGlzdCA9IGhlYWQ7CiAgTGlzdCogbmV3X2hlYWQgPSBsaXN0OwogIGlmIChsaXN0LT5uZXh0ICE9IG51bGxwdHIpIHsKICAgICBsaXN0ID0gcmV2ZXJzZShsaXN0LT5uZXh0KTsKICAgICBuZXdfaGVhZCA9IGxpc3Q7CiAgICAgd2hpbGUgKGxpc3QtPm5leHQgIT0gbnVsbHB0cikgewogICAgIAlsaXN0ID0gbGlzdC0+bmV4dDsKICAgICB9CiAgICAgbGlzdC0+bmV4dCA9IGhlYWQ7CiAgICAgaGVhZC0+bmV4dCA9IG51bGxwdHI7CiAgfQogIHJldHVybiBuZXdfaGVhZDsKfQoKaW50IG1haW4oKSB7CiBMaXN0KiBoZWFkID0gbmV3IExpc3QoMSk7CiBMaXN0KiBsaXN0ID0gaGVhZDsKIGZvciAoaW50IGluZGV4ID0gMjsgaW5kZXggPCAxMDsgaW5kZXgrKykgewogIExpc3QqIG5leHQgPSBuZXcgTGlzdChpbmRleCk7CiAgbGlzdC0+bmV4dCA9IG5leHQ7CiAgbGlzdCA9IG5leHQ7CiB9CiBoZWFkID0gcmV2ZXJzZShoZWFkKTsKIAogd2hpbGUgKGhlYWQgIT0gbnVsbHB0cikgewogIHByaW50ZigiJWRcbiIsIGhlYWQtPnZhbHVlKTsKICBoZWFkID0gaGVhZC0+bmV4dDsKIH0KIHJldHVybiAwOwp9