GESP 2025 年 12 月 C++ 五级认证真题与解析


第 1 题:循环单链表怎么'安全走一圈'?
背景
想象一列环形小火车,每节车厢(结点)都有一个数字,最后一节车厢指回第一节,永远绕圈跑。现在要求写一个程序,把火车上的数字刚好每节都念一遍,不多、不少、不死循环。
关键代码位置
Node* p = head; _______________________ cout << endl;
注意:这是循环单链表! p 永远不会变成 nullptr!
错误思路(陷阱)
while (p != nullptr) { ... }
死循环警告!在循环链表里,next 永远不会是 nullptr。
正确思路(标准做法)
do { cout << p->data << " "; p = p->next; } while (p != head);
为什么用 do...while?
- 必须先输出头结点
- 再判断是不是回到起点
正确答案
C
知识点总结
- 循环链表遍历 👉
do...while - 判断条件 👉
p != head - 不能用
nullptr判断结束
第 2 题:区块链只能'接在尾巴上'
背景
区块链就像一串历史账本,每一页(区块)都记着'上一页是谁',新账只能加在最后,不能插队。
目标
实现 addBlock,把新区块正确接到链尾。
常见错误
- 改
tail->prev - 把
tail指回老区块 都会把'链'弄断。


