有关下面代码的说法正确的是( )。
#include <iostream>
class Node {
public:
int Value;
Node * Next;
Node(int Val, Node * Nxt = nullptr) {
Value = Val;
Next = Nxt;
}
};
int main() {
Node * firstNode = new Node(10);
firstNode->Next = new Node(100);
firstNode->Next->Next = new Node(111, firstNode);
return 0;
}拿到题先别急着看选项,把代码里的new和指针赋值像画图一样在脑子里连起来:第一个节点指向第二个,第二个指向第三个,而第三个的Next参数传回了第一个节点,这就形成了一个闭环,直接锁定循环链表。
学生最容易掉进‘单向链表’的惯性思维陷阱,只盯着前两个节点的单向延伸,忽略了第三个节点构造函数里显式传入的firstNode作为Next参数,从而漏掉闭环;或者被‘指针链表’这种模糊术语带偏,认为只要有指针就是指针链表;还有的会误判为双向链表,因为没看到prev指针就急着否定单向,其实本题就是典型的用Next指回头部的循环结构。
【考点】循环链表识别、C++构造函数参数传递、指针操作逻辑。
【概念人话版】链表就是像串珠子一样,每个珠子(节点)手里拿着下一个珠子的地址。单向链表只能顺着指,走到头就没了;双向链表每个珠子手里既有下一个也有上一个;循环链表最特别,走到最后一个珠子时,它指的不是空,而是绕了一圈又指回了第一个珠子,就像跑步绕操场一圈回到起点。
【命题人怎么挖坑】这题是GESP五级高频陷阱题。命题人专卡‘结构识别’,喜欢用代码构建过程来伪装。你看代码:先new一个10,它的Next指向new的100;然后100的Next指向new的111,注意这里111的构造函数里写了firstNode(也就是那个10)。新手往往只看到前两步是单向延伸,默认觉得是单向链表(A选项),或者因为没看到prev指针就排除双向(B选项)。但命题人故意在第三个节点里把首节点传进去,形成闭环,这是最隐蔽的‘指回头部’操作。
【思考心法:拿到题先画指针流】别急着选,按执行顺序走一遍: 1. firstNode = new Node(10) —— 节点10诞生,Next默认nullptr。 2. firstNode->Next = new Node(100) —— 节点100诞生,firstNode的Next现在指向100。 3. firstNode->Next->Next = new Node(111, firstNode) —— 节点111诞生,它的Next参数直接填了firstNode。此时,100的Next被赋值为111,而111的Next就是10。
关键就在第三步:111的Next不是nullptr,而是firstNode(10)。这意味着从10出发:10→100→111→10,永远转圈,没有尽头。这就是循环链表的定义。
【逐项拆解,为什么选C】 A选项‘单向链表’错在哪?单向链表走到尾节点时,尾节点的Next必须是nullptr(或结束标记)。但本题尾节点111的Next指向了10,形成了环,不符合单向链表终止条件。 B选项‘双向链表’错在哪?双向链表每个节点必须同时有Next和Prev(或类似反向指针)。本题Node类只有Next,没有Prev,结构上根本不支持反向遍历,所以不可能是双向。 D选项‘指针链表’是个伪概念。所有链表都由指针连接,但‘指针链表’不是标准术语,命题人设这个是为了混淆视听,考察你是否真正理解链表分类依据(单向/双向/循环/静态/动态等)。
所以唯一符合代码行为的是C选项‘循环链表’。
【避坑提醒】很多学生会纠结第二个new Node(100)没传next参数,以为它默认是nullptr,从而误判为单向延伸。其实C++构造函数里next默认nullptr,但后面第一行firstNode->Next = new Node(100)已经把它改成了指向100,所以100的Next是有效的。真正决定链表类型的是第三个节点的构造参数firstNode,这是命题人埋的‘指回头部’炸弹。
【考频与趋势】从真实题库看,‘指针与内存’类题目共考过77题,覆盖2007到2026年,其中2023年13题、2024年17题、2025年25题、2026年16题,可见近年持续高频。‘链表’专题单独统计共81题,五级独占42题,占比超一半,说明五级对链表结构的辨析是重中之重。‘图形结构’大类213题中,2024年高达61题,2025年56题,2026年40题,结构题整体呈上升趋势。而‘图的基本概念’更是281题,2026年71题,说明数据结构与图的结合越来越紧密。
【未来预测】基于近年数据,2027年GESP五级仍大概率会考链表类型识别,且可能结合动态内存泄漏或构造函数参数传递做更隐蔽的陷阱(比如把循环链表伪装成单向,或让考生在代码中补全prev指针判断双向)。暂无足够依据预测具体年份,但‘结构识别+指针操作’这一组合拳在未来两三年内几乎不会降温,考生需牢牢掌握‘画指针流’这一破题铁律。