#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int data;
struct node *next;
} node;
void push(node **headRef, int data)
{
node
*newnode
= malloc(sizeof(node
)); newnode->data = data;
newnode->next = *headRef;
*headRef = newnode;
}
void printlist(node *head)
{
while(head != NULL)
{
head = head->next;
}
}
// helper function
node* _reverseList(node *head, node *pre )
{ if (!head) return NULL;
if(!head->next)
{
head->next=pre;
return head;
}
node *next = head->next;
head->next = pre;
return _reverseList(next, head);
}
void recursive_reverse(node **headRef)
{
*headRef = _reverseList(*headRef, NULL);
}
int main()
{
node *ll = NULL;
int i;
for(i = 0; i < 100; i++)
push(&ll, i);
printlist(ll);
recursive_reverse(&ll);
printlist(ll);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnR5cGVkZWYgc3RydWN0IG5vZGUKewogICAgaW50IGRhdGE7CiAgICBzdHJ1Y3Qgbm9kZSAqbmV4dDsKfSBub2RlOwoKdm9pZCBwdXNoKG5vZGUgKipoZWFkUmVmLCBpbnQgZGF0YSkKewogICAgbm9kZSAqbmV3bm9kZSA9IG1hbGxvYyhzaXplb2Yobm9kZSkpOwogICAgbmV3bm9kZS0+ZGF0YSA9IGRhdGE7CiAgICBuZXdub2RlLT5uZXh0ID0gKmhlYWRSZWY7CiAgICAqaGVhZFJlZiA9IG5ld25vZGU7Cn0KCnZvaWQgcHJpbnRsaXN0KG5vZGUgKmhlYWQpCnsKICAgIHdoaWxlKGhlYWQgIT0gTlVMTCkKICAgIHsKICAgICAgICBwcmludGYoIiVkLT4iLCBoZWFkLT5kYXRhKTsKICAgICAgICBoZWFkID0gaGVhZC0+bmV4dDsKICAgIH0KICAgIHByaW50ZigiTlVMTFxuIik7Cn0KCi8vIGhlbHBlciBmdW5jdGlvbgpub2RlKiBfcmV2ZXJzZUxpc3Qobm9kZSAqaGVhZCwgbm9kZSAqcHJlICkKeyAgIGlmICghaGVhZCkgcmV0dXJuIE5VTEw7CiAgICBpZighaGVhZC0+bmV4dCkKICAgIHsKICAgICAgICBoZWFkLT5uZXh0PXByZTsKICAgICAgICByZXR1cm4gaGVhZDsKICAgIH0KICAgIG5vZGUgKm5leHQgPSBoZWFkLT5uZXh0OwogICAgaGVhZC0+bmV4dCA9IHByZTsKICAgIHJldHVybiBfcmV2ZXJzZUxpc3QobmV4dCwgaGVhZCk7Cn0KCnZvaWQgcmVjdXJzaXZlX3JldmVyc2Uobm9kZSAqKmhlYWRSZWYpCnsKICAgICpoZWFkUmVmID0gX3JldmVyc2VMaXN0KCpoZWFkUmVmLCBOVUxMKTsKfQoKaW50IG1haW4oKQp7CiAgICBub2RlICpsbCA9IE5VTEw7CiAgICBpbnQgaTsKICAgIGZvcihpID0gMDsgaSA8IDEwMDsgaSsrKQogICAgICAgIHB1c2goJmxsLCBpKTsKICAgIHByaW50bGlzdChsbCk7CiAgICByZWN1cnNpdmVfcmV2ZXJzZSgmbGwpOwogICAgcHJpbnRsaXN0KGxsKTsKCiAgICByZXR1cm4gMDsKfQ==