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.**(A)** *head_ref = prev;**(B)** *head_ref = current;**(C)** *head_ref = next;**(D)** *head_ref = NULL;**Answer:** **(A)****Explanation:** *head_ref = prev;

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.

See the following complete running program.

`#include<stdio.h>` `#include<stdlib.h>` ` ` `/* 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;` `}` |

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.