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;
}
}
- A.
1,2,3,4,5,6,7
- B.
2,1,4,3,6,5,7
- C.
1,3,2,5,4,7,6
- 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.
First iteration: swap 1 and 2 -> list becomes 2,1,3,4,5,6,7.
Second iteration: move to nodes 3 and 4 and swap -> 2,1,4,3,5,6,7.
Third iteration: move to nodes 5 and 6 and swap -> 2,1,4,3,6,5,7.
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.