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

admin2009-01-15  63

问题 现有以下结构体说明和变量定义,如图所示,指针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;

答案8

解析 选项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/4LXp777K
0

最新回复(0)