Project ForgeSign up free
Data Structures
Arrays & Linked Lists
GATE 2008
Expert

The following C function takes a singly-linked list of integers as a parameter and rearranges the elements of the list. The function is called with the list containing the integers 1,2,3,4,5,6,7 in the given order. What will be the contents of the list after the function completes execution?

struct node { int value; struct node *next; };
void rearrange(struct node *list) {
  struct node *p, *q; int temp;
  if (!list || !list->next) return;
  p = list; q = list->next;
  while (q) {
    temp = p->value; p->value = q->value;
    q->value = temp; p = q->next;
    q = p ? p->next : 0;
  }
}
  • A1,2,3,4,5,6,7
  • 2,1,4,3,6,5,7
  • C1,3,2,5,4,7,6
  • D2,3,4,5,6,7,1

Explanation

Tracing: p=node1,q=node2 → swap values (node1↔node2 become 2,1). p=node3,q=node4 → swap (become 4,3). p=node5,q=node6 → swap (become 6,5). p=node7,q=NULL (node7 has no next) → loop ends. Final: 2,1,4,3,6,5,7.

Source: GATE CS 2008 (2008)

This question is part of a 15-day revision cycle — sign in and Project Forge will bring it back the day before you'd forget it.

Start revising free