问题 单项选择题

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


若有以下程序段:
q=s; s=s->next; p=s;
while (p->next) p=p->next;
p->next=q; q->next=NULL;
该程序段实现的功能是( )。

答案

参考答案:A

解析: 因为刚开始时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。

填空题
判断题