程序中已构成如下图所示的不带头结点的单向链表结构,指针变量s、p、q均已正确定义,并用于指向链表结点,指针变量s总是作为头指针指向链表的第一个结点。若有以下程序段: q=s; s=s->next; p=s; while (p->next

admin2009-01-15  28

问题 程序中已构成如下图所示的不带头结点的单向链表结构,指针变量s、p、q均已正确定义,并用于指向链表结点,指针变量s总是作为头指针指向链表的第一个结点。若有以下程序段:    q=s;   s=s->next;   p=s;    while (p->next)  p=p->next;    p->next=q;    q->next=NULL;    该程序段实现的功能是(    )。

选项 A、首结点成为尾结点
B、尾结点成为首结点
C、删除首结点
D、删除尾结点

答案1

解析 因为刚开始时s指向a结点(链表头),所以语句q=s;使q也指向a结点。s=s->next;语句使s指向a的下一个结点b。p=s;语句使p也指向b结点。接下来是一个while循环,循环条件为 p->next,即当p没有指向链表尾时执行循环体p=p->next;让p指向下一个结点,所以当循环结束时,p指向链表尾(c结点)。执行到此时,s、p、q分别指向的结点是b、c、a。然后执行p->next=q;,使c结点的后续指针指向了a结点。最后执行q->next=NULL;,使a结点的后续指针为NULL。由此可见,该程序段实现了将a结点移动到c结点之后,即首结点成为尾结点。故应该选择A。
转载请注明原文地址:https://jikaoti.com/ti/mmK0FFFM
0

最新回复(0)