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

The Gateway to Computer Science Excellence

+28 votes

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$

+27 votes

Best answer

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.**

+2

can someone explain me this line

q = p? p ->next : 0;

After first exchange p points to q->next, so this expression should evaluate to false making q=0...but its executing p->next..why?? what am i missing? @Arjun @ManaliSikdar

0

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

0 votes

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

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

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

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

after this step p pointing to 7 and q pointing to NULL.

at last ternary operator execute - q = p->next (as p hold address of 7) i.e q= NULL

while loop terminate as q=NULL

so answer is B

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

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

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

after this step p pointing to 7 and q pointing to NULL.

at last ternary operator execute - q = p->next (as p hold address of 7) i.e q= NULL

while loop terminate as q=NULL

so answer is B

52,345 questions

60,471 answers

201,797 comments

95,274 users