#include #include struct Node { struct Node* next; int data; }; typedef struct Node Node; /*************************************/ /* FUNCTION TO REVERSE A LINKED LIST */ Node* reverse(Node* iter) { Node* prev = 0; Node* next = 0; while(iter) { next = iter->next; iter->next = prev; prev = iter; iter = next; } return prev; } /*************************************/ void print_list(Node* iter) { fprintf(stdout, ": "); while (iter) { fprintf(stdout, "%d ", iter->data); iter = iter->next; } fprintf(stdout, "\n"); } int main(int argc, char** argv) { int i; Node *head, *iter; head = malloc(sizeof(Node)); head->data = 1; iter = head; for (i = 2; i <=20; ++i) { iter->next = malloc(sizeof(Node)); iter->next->data = i; iter = iter->next; } iter->next = 0; print_list(head); head = reverse(head); print_list(head); head = reverse(head); print_list(head); iter = head; while (iter) { head = iter; iter = iter->next; free(head); } return 0; }