计算机二级

现有以下结构体说明和变量定义,如图所示,指针p、q、r分别指定一个链表中连续的3个结点。struct node {bar data; struct node*next;}*p,*q,*r; 现要将q和r所指结点交换前后位置,同时要保持链表的结构,下列不能完成此操作的语句是( )。A.q->next=r->next;P >next=r;r- >next =q;B.q->next=r;q->next=r->next;r->next=q;C.q->next=r->next;r->next=q;P->next=r

题目

现有以下结构体说明和变量定义,如图所示,指针p、q、r分别指定一个链表中连续的3个结点。struct node {bar data; struct node*next;}*p,*q,*r; 现要将q和r所指结点交换前后位置,同时要保持链表的结构,下列不能完成此操作的语句是( )。

A.q->next=r->next;P >next=r;r- >next =q;

B.q->next=r;q->next=r->next;r->next=q;

C.q->next=r->next;r->next=q;P->next=r:

D.q->next=q;P->next=r;q->next=r-> next;

参考答案和解析
正确答案:D
由题目ee线性链表的定义可知,要将q和r所指的结点交换前后位置,只要使q指向r的后一个结点,p指向r结点,r指向q结点即可。而在选项D由,r->next=q,这时r指向的节点为q;p->nextr,这时p指向的节点为r;q->next=r->next,因为r节点已经指向q,所以执行这个语句后q又指向q,所以选项D不正确。
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

现有以下结构体说明和变量定义,如图所示,指针P、q、r分别指定一个链表中连续的3个结点。

struct node

{har data;

struct node*next;)*P,*q,*r;

现要将q和r所指结点交换前后位置,同时要保持链表的结构,下列不能完成此操作的语句是( )。

A.q-:>next=r->next;p--:>next=r;rm:>next=q;

B.q-:>next=r;q->next=r->next;r->next=q;

C.q-:>next=r->next;r->next=q;p->next=r;

D.q-:>next=q;p->next=r;q->next=r->next;


正确答案:D
由题目中线性链表的定义可知,要将q和r所指的结点交换前后位置,只要使q指向r的后一个结点,P指向r结点,r指向q结点即可。而在选项D中,r->next=q,这时r指向的节点为q;p->next=r,这时P指向的节点为r;q->next:r->next,因为r节点已经指向q,所以执行这个语句后q又指向q,所以选项D不正确。

第2题:

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

*r;现要将q和r所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序是

A.r->next=q; q->next=r->next; p->next=r;

B.q->next=r->next; p->next=r; r->next=q;

C.p->next=r; q->next=r->next; r->next=q;

D.q->next=r->next; r->next=q; p->next=r;


正确答案:A
解析:题目中要求将q和r所指结点的先后位置交换,即要求p所指结点的指针域指向r所指向的结点,r所指向的结点的指针域指向q所指向的结点,q所指向的结点的指针域指向r所指向的结点。选项A首先让r所指向的指针的指针域指向q所指向的结点,这样就将r所指向的结点的指针域指向的结点丢失了,故选项A错误。选项B首先q所指向的结点的指针域指向r所指向的结点的指针域所指向的结点,然后,让p所指向结点的指针域指向r所指向的结点,最后让r所指向的结点的指针域指向q所指向的结点,满足要求,故选项B正确。选项C首先让p所指向结点的指针域指向r所指向的结点,然后让q所指向的结点的指针域指向r所指向的结点的指针城所指向的结点,最后让r所指向的结点的指针域指向q所指向的结点,满足要求,故选项C正确.选项D首先让q所指向的结点的指针域指向r所指向的结点的指针域所指向的结点,然后,让,所指向的结点的指针城指向q所指向的结点让,最后让P所指向结点的指针城指向r所指向的结点,满足要求,故选项D正确;所以,4个选项中选项A符合题意。

第3题:

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

第4题:

现有以下结构体说明和变量定义,如图所示,指针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操作错误。

第5题:

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

现要将q和r所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序段是 ______。

A.q->next=r->next;r->next=q;p->next=r;

B.q->next=r->next;p->next=r;r->next=q;

C.p->next=r;q->next=r->next;r->next=q;

D.r->next=q;q->next=r->next;p->next=r;


正确答案:D

第6题:

有以下结构体说明和变量定义,如图所示,指针p、q、r,分别指向此链表中的3个连续结点。 Struct node { int data; Struct node *hext; } *p,*q,

*r;现要将Q所指结点从链表中删除,同时要保持链表的连续,以下不能完成指定操作的语句是

A.p->next=q->next;

B.p->next=p->next->next;

C.p->next=r;

D.p=q->next;


正确答案:D
解析:要删除链表中间的某个结点,只需要使它的前一个结点的next指针指向它的后一个结点-不过,严格来讲还需要使用free()函数释放掉该结点在内存中所占的空间。本题要删除的是q所指结点(以下简称q结点),只需使p结点的next指针指向r结点即可。选项A中,因为Q结点的next指向r结点,所以执行p->next=q->next;语句后p结点的next就指向了r结点,故选项A能完成删除。选项B中,p->next->next等价于q->next,因此也能完成删除。选项C直接让p->next指向r结点,当然可以删除。选项D使指针p指向q->next(即r结点),这样做不会影响到内存中的链表,所以应该选择D。

第7题:

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

现要将q所指结点从链表中删除,同时要保持链表的连续,以下不能完成指定操作的语句是

A.p->next=q->next;

B.p-next=p->next->next;

C.p->next=r;

D.p=q->enxt;


正确答案:D
解析:本题考查链表结点的删除。q->next中存放的是r所指结点的首地址,将r所指结点的首地址存于p->next中,则实现删除q所指结点的功能,并保持链表连续,p所指结点与r所指结点相连。

第8题:

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

现要将q和r所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序段是

A.r->next=q;q->next=r->next;p->next=r;

B.q->next=r->next;p-next=r;r->next=q;

C.p->next=r;q->next=r->next;r->next=q;

D.q->next=r->next;r->next=q;P->next=r;


正确答案:A
解析:题目中要求将q和r所指结点的先后位置交换,即要求p所指结点的指针域指向r所指向的结点,r所指向的结点的指针域指向q所指向的结点,q所指向的结点的指针域指向r所指向的结点。选项A首先让r所指向的指针的指针域指向q所指向的结点,这样就将r所指向的结点的指针域指向的结点丢失了。选项B首先q所指向的结点的指针域指向r所指向的结点的指针域所指向的结点,然后,让p所指向结点的指针域指向r所指向的结点,最后让r所指向的结点的指针域指向q所指向的结点,满足要求。选项C首先让p所指向结点的指针域指向r所指向的结点,然后让q所指向的结点的指针域指向r所指向的结点的指针域所指向的结点,最后让r所指向的结点的指针域指向q所指向的结点,满足要求。选项D首先让q所指向的结点的指针域指向r所指向的结点的指针域所指向的结点,然后,让r所指向的结点的指针域指向q所指向的结点,最后让P所指向结点的指针域指向r所指向的结点,满足要求。

第9题:

有以下结构体说明和变量定义,如图所示,指针p、q、r分别指向一个链表中的三个连续结点。

struct node

{ int data;

struct node *next;

} *p, *q, *r;

现要将q和r所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序段是

A.r->next=q; q->next=r->next; p->next=r;

B.q->next=r->next; p->next=r; r->next=q;

C.p->next=r; q->next=r->next; r->next=q;

D.q->next=r->next; r->next=q; p->next=r;


正确答案:A
解析:“r->next=q;”表示r的下一个结点为qo“q->next=->next;”则表示q的下一个结点是r的下一个结点,即q结点本身,因此与后续结点便断开了联系。