#include<stdio.h>
#include<stdlib.h>
/* Link list node */
struct node
{
int data;
struct node* next;
};
typedef struct node NODE;
/* Function to reverse the linked list */
NODE* reverse(NODE* head,NODE* prev)
{
NODE* temp=head;
if(head==NULL)
return prev;
head=reverse(head->next,head);
temp->next=prev;
return head;
}
/* Function to push a node */
void push(struct node** head_ref, int new_data)
{
/* allocate node */
struct node* new_node =
(struct node*) malloc(sizeof(struct node));
/* put in the data */
new_node->data = new_data;
/* link the old list off the new node */
new_node->next = (*head_ref);
/* move the head to point to the new node */
(*head_ref) = new_node;
}
/* Function to print linked list */
void printList(struct node *head)
{
struct node *temp = head;
while(temp != NULL)
{
printf("%d ", temp->data);
temp = temp->next;
}
}
/* Drier program to test above function*/
int main()
{
/* Start with the empty list */
struct node* head = NULL;
push(&head, 20);
push(&head, 4);
push(&head, 15);
push(&head, 85);
printList(head);
head=reverse(head,NULL);
printf("\n Reversed Linked list \n");
printList(head);
getchar();
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CiAKLyogTGluayBsaXN0IG5vZGUgKi8Kc3RydWN0IG5vZGUKewogICAgaW50IGRhdGE7CiAgICBzdHJ1Y3Qgbm9kZSogbmV4dDsKfTsKIAogdHlwZWRlZiBzdHJ1Y3Qgbm9kZSBOT0RFOwovKiBGdW5jdGlvbiB0byByZXZlcnNlIHRoZSBsaW5rZWQgbGlzdCAqLwpOT0RFKiByZXZlcnNlKE5PREUqIGhlYWQsTk9ERSogcHJldikKewoJTk9ERSogdGVtcD1oZWFkOwoJaWYoaGVhZD09TlVMTCkKCXJldHVybiBwcmV2OwoJaGVhZD1yZXZlcnNlKGhlYWQtPm5leHQsaGVhZCk7Cgl0ZW1wLT5uZXh0PXByZXY7CglyZXR1cm4gaGVhZDsKCQp9CiAKLyogRnVuY3Rpb24gdG8gcHVzaCBhIG5vZGUgKi8Kdm9pZCBwdXNoKHN0cnVjdCBub2RlKiogaGVhZF9yZWYsIGludCBuZXdfZGF0YSkKewogICAgLyogYWxsb2NhdGUgbm9kZSAqLwogICAgc3RydWN0IG5vZGUqIG5ld19ub2RlID0KICAgICAgICAgICAgKHN0cnVjdCBub2RlKikgbWFsbG9jKHNpemVvZihzdHJ1Y3Qgbm9kZSkpOwogICAgICAgICAgICAKICAgIC8qIHB1dCBpbiB0aGUgZGF0YSAgKi8KICAgIG5ld19ub2RlLT5kYXRhICA9IG5ld19kYXRhOwogICAgICAgICAgICAgICAgCiAgICAvKiBsaW5rIHRoZSBvbGQgbGlzdCBvZmYgdGhlIG5ldyBub2RlICovCiAgICBuZXdfbm9kZS0+bmV4dCA9ICgqaGVhZF9yZWYpOyAgICAKICAgICAgICAKICAgIC8qIG1vdmUgdGhlIGhlYWQgdG8gcG9pbnQgdG8gdGhlIG5ldyBub2RlICovCiAgICAoKmhlYWRfcmVmKSAgICA9IG5ld19ub2RlOwp9CiAKLyogRnVuY3Rpb24gdG8gcHJpbnQgbGlua2VkIGxpc3QgKi8Kdm9pZCBwcmludExpc3Qoc3RydWN0IG5vZGUgKmhlYWQpCnsKICAgIHN0cnVjdCBub2RlICp0ZW1wID0gaGVhZDsKICAgIHdoaWxlKHRlbXAgIT0gTlVMTCkKICAgIHsKICAgICAgICBwcmludGYoIiVkICAiLCB0ZW1wLT5kYXRhKTsgICAgCiAgICAgICAgdGVtcCA9IHRlbXAtPm5leHQ7ICAKICAgIH0KfSAgICAKIAovKiBEcmllciBwcm9ncmFtIHRvIHRlc3QgYWJvdmUgZnVuY3Rpb24qLwppbnQgbWFpbigpCnsKICAgIC8qIFN0YXJ0IHdpdGggdGhlIGVtcHR5IGxpc3QgKi8KICAgIHN0cnVjdCBub2RlKiBoZWFkID0gTlVMTDsKICAgCiAgICAgcHVzaCgmaGVhZCwgMjApOwogICAgIHB1c2goJmhlYWQsIDQpOwogICAgIHB1c2goJmhlYWQsIDE1KTsgCiAgICAgcHVzaCgmaGVhZCwgODUpOyAgICAgIAogICAgIAogICAgIHByaW50TGlzdChoZWFkKTsgICAgCiAgICAgaGVhZD1yZXZlcnNlKGhlYWQsTlVMTCk7ICAgICAgICAgICAgICAgICAgICAgIAogICAgIHByaW50ZigiXG4gUmV2ZXJzZWQgTGlua2VkIGxpc3QgXG4iKTsKICAgICBwcmludExpc3QoaGVhZCk7ICAgIAogICAgIGdldGNoYXIoKTsKfQ==