指针p、q和r依次指向某循环链表中三个相邻的结点,交换结点*q和结点*r在表中次序的程序段是 ( )A.p—>next=r; q—>next=r—>next; r—>next=q;B.p—>next=r; r—>next=q; q—>next=r—>next;C.r—>next=q; q—>next=r—>next; p—>next=r;D.r—>next=q; p—>next=r; q—>next=r—>next;

题目

指针p、q和r依次指向某循环链表中三个相邻的结点,交换结点*q和结点*r在表中次序的程序段是 ( )

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

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

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

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


相似考题
更多“指针p、q和r依次指向某循环链表中三个相邻的结点,交换结点*q和结点*r在表中次序的程序段是()A.p—> ”相关问题
  • 第1题:

    在一个不带头结点的单循环链表中,p、q分别指向表中第一个结点和尾结点,现要删除第一个结点,且p、q仍然分别指向新表中第一个结点和尾结点。可用的语句是p=p->next;和( )。

    A、q=p

    B、q->next=p

    C、p=q->next

    D、p->next=q


    标准答案:B

  • 第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
    解析:“r->next=q;”表示r的下一个结点为qo“q->next=->next;”则表示q的下一个结点是r的下一个结点,即q结点本身,因此与后续结点便断开了联系。

  • 第3题:

    某单循环链表头指针为head且表长大于1,指针p指向表中某个结点,若p→next→next= head,则(11)。

    A.p指向头结点

    B.p指向尾结点

    C.*p的直接后继是头结点

    D.*P的直接后继是尾结点


    正确答案:D
    解析:因为p→next→next=head,所以p→next是尾结点,即*P的直接后继是尾结点。

  • 第4题:

    假定已建立以下链表结构,且指针P和q已指向如图所示的结点:

    则以下选项中可将q所指结点从链表中删除并释放该结点的语句组是( )。

    A.p一>next=q一>next;flee(q);

    B.p=q一>next;free(q);

    C.p=q;free(q);

    D.(*p).next=(幸q).next;ffee(p);


    正确答案:A
    本题考查删除链表中的结点操作,其方法是将要删除结点的上个结点的下个结点指向要删除结点的下个结点,然后释放该要删除结点,所以选项A正确。

  • 第5题:

    有以下结构体说明和变量定义,如下图所示,指针p、q、r分别指向一个链表中的3个连续结点。 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->neaxt;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所指向结点的指针域所指向的结点,然后,让r所指向结点的指针域指向q所指向的结点,最后让p所指向结点的指针域指向r所指向的结点,满足要求,故选项D正确。所以,4个选项中选项A符合题意。

  • 第6题:

    单链表的每个结点中包括一个指针link,它指向该结点的后继结点。现要将指针q指向的新结点插入到指针P指向的的单链表结点之后,下面的操作序列中哪一个是正确的?

    A.q:=p↑.link; p↑.link:=q↑.link;

    B.p↑.link:=q↑.link; q:=p↑.link;

    C.q↑.link:=p↑.link;p↑link:=q;

    D.p↑.link:=q; q↑.link:=p↑.link;


    正确答案:C
    解析:将指针p所指向的地址赋于q,将q的值赋于p指向的地址。

  • 第7题:

    单向链表的每一个结点都有一个指向它的后续结点的指针link,现有结点p和q,结点q在结点p的前面,要删除结点p,正确的操作应该是

    A.q↑. link:=p↑. link;

    B.p ↑. link:= q ↑. link;

    C.q↑. link:=p; p↑. link:=q;

    D.q:=p↑. link; p↑. link:= q ↑. link;


    正确答案:A
    解析:单向链表删除运算只要将q的指针link指向p的后继即可q↑.link:=p↑.link。

  • 第8题:

    双向链表中有两个指针域llink和rlink,分别指向前驱和后继,设β指向表中的一个结点,q指向一待插入结点,现要求在p前插入q,则正确的插人为()。


    答案:D
    解析:
    p→llink→rlink=q;q→rlink=p;q→llink=p→llink;p→llink=q

  • 第9题:

    已知指针p和q分别指向某单链表中第一个结点和最后一个结点。假设指针s指向另一个单链表中某个结点,则在s所指结点之后插入上述链表应执行的语句为()。

    • A、q->next=s->next;s->next=p;
    • B、s->next=p;q->next=s->next;
    • C、p->next=s->next;s->next=q;
    • D、s->next=q;p->next=s->next;

    正确答案:A

  • 第10题:

    在一个单链表中,己知指针q所指向的结点是指针P所指向的结点的前趋结点,若在指针q和p所指向的两个结点之间插入指针s指向的结点,则执行()

    • A、 p->next=s;s->next=q
    • B、 q->next=s;s->next=p
    • C、 S->next=p->next;p->next=s
    • D、 p->next=s->next;s->next=q

    正确答案:B

  • 第11题:

    在一个单链表中,p、q分别指向表中两个相邻的结点,且q所指结点是p所指结点的直接后继,现要删除q所指结点,可用语句()。

    • A、p->next=q->next
    • B、p=q->next
    • C、q->next=NULL
    • D、p->next=q

    正确答案:A

  • 第12题:

    填空题
    已知在结点个数大于1的单链表中,指针p指向某个结点,则下列程序段结束时,指针q指向*p的()结点。 q=p; while(q->next!=p) q=q->next;

    正确答案: 后继
    解析: 暂无解析

  • 第13题:

    在一个单链表中,p、q分别指向表中两个相邻的结点,且q所指结点是p所指结点的直接后继,现要删除q所指结点,可用语句( )。

    A、p->next=q->next

    B、q->next=NULL

    C、p->next=q

    D、p=q->next


    标准答案:A

  • 第14题:

    单键表的每个结点中包括一个指针link,它指向该结点的后继结点。现要将指针q指向的新结点插入到指针p指向的单链表结点之后,下面的操作序列中哪一个是正确的?

    A.q:=p^.link;p^.link:=q^.link;

    B.p^.link:=q^.link;q:=p^.link;

    C.q^.link:=p^.link;p^.link:=q;

    D.p^.link:=q;q^.link:=p^.link;


    正确答案:C
    解析:本题考核有关计算机键表的基本知识,参考2.2.2“键表”一节。

  • 第15题:

    程序中已构成如下图所示的不带头结点的单向链表结构,指针变量s、P、q、均已正确定义,并用于指向链表结点,指针变量s总是作为头指针指向链表的第一个结点。

    该程序段实现的功能是( )。

    A.首结点成为尾结点

    B.尾结点成为首结点

    C.删除首结点

    D.删除尾结点


    正确答案:A
    循环找到末尾结点,然后赋值给第一个结点,所以选择A)。

  • 第16题:

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

  • 第17题:

    有以下结构说明和变量定义,指针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所指结点相连。

  • 第18题:

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

  • 第19题:

    设指针q指向单链表中结点A,指针p指向单链表中结点A的后继结点B,指针s指向被插入的结点X,则在结点A和结点B插入结点X的操作序列为()。

    A.p->next=s;s->next=q;
    B.q->next=s;s->next=p;
    C.p->next=s->next;s->next=p;
    D.s->next=p->next;p->next=-s;

    答案:B
    解析:
    插入s结点,应使s的next指针指向p结点,使q结点的next指针指向s。

  • 第20题:

    在一个单链表中,p、q分别指向表中两个相邻的结点,且q所指结点是p所指结点的直接后继,现要删除q所指结点,可用语句()。

    Ap->next=q->next

    Bp=q->next

    Cq->next=NULL

    Dp->next=q


    A

  • 第21题:

    设单链表的结点结构为(data,next)。已知指针p指向单链表中的结点,q指向新结点,欲将q插入到p结点之后,则需要执行的语句:();()。


    正确答案:q->next=p->next,p->next=q

  • 第22题:

    下列算法将单链表中值重复的结点删除,使所得的结果表中各结点值均不相同,试完成该算法。 void DelSameNode(LinkList L) //L是带头结点的单链表,删除其中的值重复的结点// {ListNode * p,*q,*r; p=L->next; //p初始指向开始结点// while(p){ //处理当前结点p// q=p; r=q->next; do { //删除与结点*p的值相同的结点// while(r&&r->data!=p->data){ q=r; r=r->next; } if(r){ //结点*r的值与*p的值相同,删除*r// q->next=r->next; free(r); r=(); } }while( r ); p=p->next; } }


    正确答案:q->next

  • 第23题:

    已知在结点个数大于1的单链表中,指针p指向某个结点,则下列程序段结束时,指针q指向*p的()结点。 q=p; while(q->next!=p) q=q->next;


    正确答案:后继