#include <stdio.h>
struct Node
{
Node(int value)
: m_value(value)
, next(NULL)
{}
int m_value;
struct Node * next;
};
Node* reverse_list1( Node* list )
{
if( list == NULL) return NULL; // reverse of empty list is empty list.
if( list->next == NULL ) // last element in list?
return list; // the reverse of a list with 1 element is the same.
else
{
Node* head = list;
Node* tail = list->next;
head->next = NULL;
Node* end_of_reverse_tail = tail; // the first will be the last...
Node * result = reverse_list1(tail);
end_of_reverse_tail->next = head;
return result;
}
}
int main(void) {
Node *a[3] = { new Node(0), new Node(1), new Node(2) };
a[0]->next = a[1];
a[1]->next = a[2];
a[2]->next = NULL;
Node * reversed = reverse_list1(a[0]);
for( Node* current = reversed; current != NULL; current = current->next)
printf("%d\n",current->m_value);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgpzdHJ1Y3QgTm9kZQp7CglOb2RlKGludCB2YWx1ZSkKCSA6IG1fdmFsdWUodmFsdWUpCgkgLCBuZXh0KE5VTEwpCgl7fQoJCglpbnQgbV92YWx1ZTsKICAgIHN0cnVjdCBOb2RlICogbmV4dDsJCn07CgpOb2RlKiByZXZlcnNlX2xpc3QxKCBOb2RlKiBsaXN0ICkKewogICAgaWYoIGxpc3QgPT0gTlVMTCkgcmV0dXJuIE5VTEw7IC8vIHJldmVyc2Ugb2YgZW1wdHkgbGlzdCBpcyBlbXB0eSBsaXN0LgogICAgaWYoIGxpc3QtPm5leHQgPT0gTlVMTCApIC8vIGxhc3QgZWxlbWVudCBpbiBsaXN0PwogICAgICAgIHJldHVybiBsaXN0OyAvLyB0aGUgcmV2ZXJzZSBvZiBhIGxpc3Qgd2l0aCAxIGVsZW1lbnQgaXMgdGhlIHNhbWUuCiAgICBlbHNlCiAgICB7CiAgICAgICAgTm9kZSogaGVhZCA9IGxpc3Q7CiAgICAgICAgTm9kZSogdGFpbCA9IGxpc3QtPm5leHQ7CiAgICAgICAgaGVhZC0+bmV4dCA9IE5VTEw7CiAgICAgICAgTm9kZSogZW5kX29mX3JldmVyc2VfdGFpbCA9IHRhaWw7IC8vIHRoZSBmaXJzdCB3aWxsIGJlIHRoZSBsYXN0Li4uCiAgICAgICAgTm9kZSAqIHJlc3VsdCA9IHJldmVyc2VfbGlzdDEodGFpbCk7CiAgICAgICAgZW5kX29mX3JldmVyc2VfdGFpbC0+bmV4dCA9IGhlYWQ7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KfQoKaW50IG1haW4odm9pZCkgewoJTm9kZSAqYVszXSA9IHsgbmV3IE5vZGUoMCksIG5ldyBOb2RlKDEpLCBuZXcgTm9kZSgyKSB9OwoJYVswXS0+bmV4dCA9IGFbMV07CglhWzFdLT5uZXh0ID0gYVsyXTsKCWFbMl0tPm5leHQgPSBOVUxMOwoJTm9kZSAqIHJldmVyc2VkID0gcmV2ZXJzZV9saXN0MShhWzBdKTsKCWZvciggTm9kZSogY3VycmVudCA9IHJldmVyc2VkOyBjdXJyZW50ICE9IE5VTEw7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0KQoJCXByaW50ZigiJWRcbiIsY3VycmVudC0+bV92YWx1ZSk7CglyZXR1cm4gMDsKfQo=