正在载入在线练习界面,本页内容可直接阅读…
AK CSP › NOIP 提高 2014 第一轮真题 › 第 11 题
NOIP 提高 2014 第一轮 第 11 题:现要将 q 和 r 所指结点的先后位置交换,同时要保持链表的连续,以下程序段中错
题目
有以下结构体说明和变量定义,如图所示,指针 $p,q,r$ 分别指向一个链表中的三个续结点。
struct node {
int 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; q->next = r->next; p->next = r;
答案
D
题解
考点定位
链表交换时的指针赋值顺序。
解题过程
原链表为 p→q→r→后继,目标是 p→r→q→后继。题目要求选出错误的程序段。
D 的第一句 r->next=q 覆盖了 r 原来的后继。第二句 q->next=r->next 读取的已经是 q,因此变成 q->next=q,产生自环;第三句再令 p->next=r,也不能修复这个问题。
A、B、C 都在覆盖 r->next 之前,把原后继赋给 q->next,因此能完成交换。
选 D。
易错提醒
赋值按顺序立即生效,后面的语句读取的是修改后的指针值。注意题目问“错误的是”。
真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1
京公网安备11010502062986号