在 C++ 中,通过恰当的实现,可以将链表首尾相接,形成循环链表。
这题考的是链表指针的本质:C++ 里指针只是存地址,只要内存没被释放,让尾节点的 next 指向头节点就完全合法。别被‘循环引用’吓到,它不等于悬空或泄漏,直接选A。
很多学生看到‘首尾相接’就本能联想到‘悬空指针’,以为尾节点还指向自己就会出问题。其实悬空指针特指指向已释放内存的指针,而循环链表里所有节点都有效,尾节点的 next 只是多绕了一圈,完全没问题。还有人把‘循环引用’和‘内存泄漏’混为一谈,觉得对象互相持有就一定会泄漏,这是错的。循环链表本身不会泄漏,只有遍历删除时忘了清理尾节点或头指针丢了才会泄漏。命题人就是拿这些绝对化的术语做陷阱,专门卡住只背定义不理解语义的考生。
【考点】链表指针操作与内存管理
这道题考查的是数据结构中链表的基本操作,特别是循环链表的构造可行性。命题人想卡住那些误以为‘指针回环’必然导致悬空或泄漏的考生。
看到‘链表首尾相接’,第一反应是遍历找到尾节点,把尾节点的 next 指针指向头节点。C++ 的指针机制完全支持这种链接关系,只要节点对象未被释放,循环引用就是合法状态。
选项 B 的‘错误’陷阱在于混淆了‘循环引用’与‘悬空指针’。悬空指针特指指向已释放内存的指针,而循环链表的尾指针仍指向有效节点,并非悬空。再说内存泄漏,循环链表本身不造成泄漏,因为每个节点依然可被正常追踪和析构;泄漏只发生在遍历删除时忘记清理尾节点或整个链表头指针丢失。命题人用‘悬空指针’这个绝对化术语做诱饵,专卡那些只背定义不理解语义的考生。
若改成‘在删除节点时未更新头尾指针,循环链表一定会内存泄漏’,答案就变成 B。这类变形题通常用来测试学生是否理解‘循环’只是指针指向关系,真正的泄漏风险来自析构流程。
【考频趋势】链表是高频考点,题库共考过 81 题,覆盖 7 个考试级别。其中 GESP 五级就考了 42 题,占比超过一半,说明五级对链表掌握要求很高。图形结构考了 213 题,图的基本概念考了 281 题,这些数据都指向一个趋势:数据结构与算法在各类竞赛中的比重越来越大,尤其是链表、图这类基础结构,几乎年年必考。
【预测】基于历年数据,GESP 五级在链表相关题目上保持高频率,未来很可能继续以‘链表操作细节’(如循环链表构建、删除节点时的指针更新)作为考点。同时,命题人可能会结合图论知识,设计更复杂的链表与图结合的题目,比如用链表存储图的邻接表,考查综合应用能力。暂无足够依据预测具体年份的题型变化,但链表作为基础结构,其重要性不会下降。