# Data Structures | Linked List | Question 5

The following function reverse() is supposed to reverse a singly linked list. There is one line missing at the end of the function.

 `/* Link list node */` `struct` `node ` `{ ` `    ``int` `data; ` `    ``struct` `node* next; ` `}; ` ` `  `/* head_ref is a double pointer which points to head (or start) pointer  ` `  ``of linked list */` `static` `void` `reverse(``struct` `node** head_ref) ` `{ ` `    ``struct` `node* prev   = NULL; ` `    ``struct` `node* current = *head_ref; ` `    ``struct` `node* next; ` `    ``while` `(current != NULL) ` `    ``{ ` `        ``next  = current->next;   ` `        ``current->next = prev;    ` `        ``prev = current; ` `        ``current = next; ` `    ``} ` `    ``/*ADD A STATEMENT HERE*/` `} ` ` `

What should be added in place of “/*ADD A STATEMENT HERE*/”, so that the function correctly reverses a linked list.

At the end of while loop, the prev pointer points to the last node of original linked list. We need to change *head_ref so that the head pointer now starts pointing to the last node.

 `#include ` `#include ` `  `  `/* Link list node */` `struct` `node ` `{ ` `    ``int` `data; ` `    ``struct` `node* next; ` `}; ` `  `  `/* Function to reverse the linked list */` `static` `void` `reverse(``struct` `node** head_ref) ` `{ ` `    ``struct` `node* prev   = NULL; ` `    ``struct` `node* current = *head_ref; ` `    ``struct` `node* next; ` `    ``while` `(current != NULL) ` `    ``{ ` `        ``next  = current->next;   ` `        ``current->next = prev;    ` `        ``prev = current; ` `        ``current = next; ` `    ``} ` `    ``*head_ref = prev; ` `} ` `  `  `/* 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);     ` `     ``reverse(&head);                       ` `     ``printf``(``"\n Reversed Linked list \n"``); ` `     ``printList(head);     ` `     ``return` `0; ` `} `

My Personal Notes arrow_drop_up
Article Tags :
Practice Tags :

3

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.