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.
(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; } |
Please Login to comment...