现有以下结构体说明和变量定义,如图所示,指针p、q、r分别指向—个链表中连续的三个结点。         street node        { char data;           struct node *next;        } *p,*q

admin2013-02-23  49

问题 现有以下结构体说明和变量定义,如图所示,指针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操作错误。
转载请注明原文地址:https://kaotiyun.com/show/06Jp777K
0

最新回复(0)