问题 单项选择题

现有以下结构体说明和变量定义,如图所示,指针p、q、r分别指向—个链表中连续的三个结点。 street 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操作错误。

单项选择题
多项选择题