问题
单项选择题
现有以下结构体说明和变量定义,如图所示,指针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)错误。