**Repeated!** --> https://gateoverflow.in/485/gate2008-62

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 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, 2 ,3, 4, 5, 6, 7$
- $2, 1, 4 ,3, 6, 5, 7$
- $1, 3, 2, 5, 4, 7, 6$
- $2, 3, 4, 5, 6, 7, 1$

### 1 comment

## 4 Answers

The loop is interchanging the adjacent elements of the list. But after each interchange, next interchange starts from the unchanged elements only (due to $p = q \rightarrow next$;).

$1$st iteration $1, 2, 3, 4, 5, 6, 7$

$\Rightarrow 2, 1, 3, 4, 5, 6, 7$

$2$nd iteration $2, 1, 4, 3, 5, 6, 7$

$3$rd iteration $2, 1, 4, 3, 6, 5, 7$

$p$ pointing to null $q$ pointing to $7$, as $p$ is false hence $q=p?$ $p \rightarrow next$:$0$; will return $q=0$ ending the loop

Answer is **option B.**

### 6 Comments

how p will point to null?

p will point to 7 and q will point to NULL (q = p->next as p is a non zero value)

Edit:

Program: http://ideone.com/T0yVty