The following C function takes a single-linked list of integers as a parameter…

2008

The following C function takes a single-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;
  }
}

  1. A.

    1,2,3,4,5,6,7

  2. B.

    2,1,4,3,6,5,7

  3. C.

    1,3,2,5,4,7,6

  4. D.

    2,3,4,5,6,7,1

Attempted by 124 students.

Show answer & explanation

Correct answer: B

Key idea: the function swaps the values of each consecutive pair of nodes (first with second, third with fourth, etc.) and then advances two nodes each loop iteration.

  1. First iteration: swap 1 and 2 -> list becomes 2,1,3,4,5,6,7.

  2. Second iteration: move to nodes 3 and 4 and swap -> 2,1,4,3,5,6,7.

  3. Third iteration: move to nodes 5 and 6 and swap -> 2,1,4,3,6,5,7.

  4. Next node is 7 without a pair, so the loop ends and 7 remains in place.

Final list: 2,1,4,3,6,5,7

A video solution is available for this question — log in and enroll to watch it.

Explore the full course: Gate Guidance By Sanchit Sir