链表节点位置交换,请问为什么选D

有以下结构体说明和变量定义,指针p、q、r依次指向一个链表中的三个连续结点。

‎struct node
{
int data
struct node *next ;
} *p, *q, *r;
‎现要将q和r所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序段是



得分/总分

A. q->next=r->next; p->next=r; r->next=q;

B. p->next=r; q->next=r->next; r->next=q;

C. q->next=r->next; r->next=q; p->next=r;

D. r->next=q; q->next=r->next; p->next=r;

D 中,r->next = q就出问题了,因为三个节点后面的链表记录在r->next中,一旦这么修改了,链表肯定就断了

学会画图,方便分析判断。