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

题目

有以下结构体说明和变量定义,如图所示,指针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
更多“ 有以下结构体说明和变量定义,如图所示,指针p、q、r分别指向一个链表中的三个连续结点。 struct node { int data; struct node*next; }*p,*q,*r;现要将q和r所指结点”相关问题
  • 第1题:

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

  • 第2题:

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

  • 第3题:

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

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

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


    A 本题考查typedef的使用方法,typedef对已存在的类型使用一个新的名字,选项A中ABC为新的类型别名,定义正确。

  • 第4题:

    有以下结构说明和变量定义,指针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->next;


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

  • 第5题:

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