问题
单项选择题
现有以下结构体说明和变量定义,如图所示,指针p、q、r分别指向一个链表中连续 的三个结点。struct node { char 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;p->next=r;q->next=r->next;
答案
参考答案:D
解析:选项 D 中首先将 q 赋给 r->next,也就是将结点 q 的地址存放在结点 r 的指针域中;接着将 r 赋给 p->next, 也就是将结点 r 的地址存放在结点 p 的指针域中,此时完成了 q 和 r 所指结点的交换。q->next=r->next 的目 的是想将 q 的指针域指向下一个结点的数据地址,但由于一开始执行了 r->next= q,即已将 r 的指针域中存 放了 q 结点的地址,所以再做操作“q->next=r->next”就相当于将 q 指向了其本身,也就是和下一个结点断开了,所以选项 D 操作错误。