GESP 五级 · GESP 202312 C++ 五级 第 12 题

选择题 · 答案 B · 考点:指针与引用、链表

← 整套速查表 GESP 五级 全部真题

题目

有关下面 C++ 代码的说法正确的是( )。

class Node
{
public:
    int Value;
    Node* Prev;
    Node* Next;
    Node(int Val, Node* Prv = NULL, Node* Nxt = NULL);
};

Node::Node(int Val, Node* Prv, Node* Nxt)
{
    this->Value = Val;
    this->Prev = Prv;
    this->Next = Nxt;
}

int main()
{
    Node firstNode = Node(10);
    firstNode.Next = new Node(100, &firstNode);
    firstNode.Next->Next = new Node(111, firstNode.Next);
}
答案:B

考点

指针与引用链表 讲解 →链表 真题汇总 →

解题思维

这道题考的是链表类型判断,拿到代码先别急着看逻辑,直接看节点定义里有没有Prev和Next两个指针成员,有就是双向,没有就是单向。

常见错误

很多考生一看到链表就默认是单向的,或者只盯着Next指针看,忽略了Prev的存在。还有人会把“指针链表”当成一个正经分类,其实那是描述性的说法,不是链表类型。更隐蔽的坑是构造函数参数顺序,new Node(100, &firstNode)里第二个参数是Prev,若误以为是Next,就会把双向链看成单向。另外,末尾节点的Next是NULL,不满足循环条件,别被“成环”的直觉带偏。

详细解析(节选)

【考点】指针与引用|结构体定义|双向链表

这道题的核心,就是让你分辨链表是单向还是双向。命题人挖坑的点很典型:节点定义里同时给了Prev和Next,但很多人只盯着Next看,或者把构造函数参数顺序搞错,导致判断失误。

先说概念。链表之所以分单向和双向,关键在于每个节点里存了几个指针。单向链表节点只有Next,只能往前走;双向链表节点既有Next又有Prev,能往前走也能往后退。题目里的Node类,public部分明确定义了int Value、Node* Prev、Node* Next,三个成员一目了然。既然Prev和Next都在,那它天生就是双向链表的结构。

再看main函数里的构造过程。第一行Node firstNode = Node(100); 创建头结点,Prev默认是NULL,Next也是NULL。第二行firstNode.Next = new Node(100, &firstNode); 这里new Node的构造函数参数是(int Val, Node* Prv, Node* Nxt),所以第二个参数&firstNode是Prev,第三个参数是Next(默认NULL)。于是第二个节点的Prev指向了firstNode,形成了firstNode ← secondNode的关系。第三行firstNode.Next->Next = new Node(111, firstNode.Next); 同理,第三个节点的Prev指向了第二个节点,Next是NULL。整体链式结构是firstNode(100) ← secondNode(100) ← thirdNode(111),每个节点都有前后指针,这就是双向链表的典型形态。

为什么不是单向?因为单向链表节点里根本没有Prev成员,或者Prev被定义为NULL且从未被赋值。这里Prev不仅定义了,而且被显式赋值为前驱节点的地址,单向链表做不到这点。

为什么不是循环链表?循环链表的特点是尾节点的Next会指回头节点(或某个中间节点),形成闭环。但题目里所有节点的Next最终都是NULL,没有回指,所以不满足循环条件。

为什么不是“指针链表”?这个说法在教材和考试标准里并不存在,它只是对“用指针实现的链表”的一种口语化描述,不能作为一种链表类型来选。命题人放这个选项,就是专门卡那些概念不清的考生。

再拆解一下易错点。最容易被忽视的是构造函数的参数顺序。Node::Node(int Val, Node* Prv, Node* Nxt)里,Prv是第二个参数,Nxt是第三个。main里new Node(100, &firstNode)只传了两个参数,第二个&firstNode对应Prv,第三个Nxt用默认值NULL。如果考生误以为第二个参数是Next,就会觉得第二个节点的Next指向了firstNode,从而误判为单向链表。这种细节就是GESP五级最爱考的。

另外,有人看到链表就下意识认为“链表必须成环”,这是被循环链表题目养成的思维定势。其实单向链表、双向链表都可以是开链,只要尾节点Next为NULL就是合法的。这道题尾节点Next就是NULL,完全符合双向开链的定义。

从考频来看,指针与引用在题库里一共考了99题,覆盖8个级别,2023年考了16题,2024年20题,2025年25题,2026年20题,可见指针类题目是高频考点,且近年有上升趋势。链表单独考了81题,其中GESP五级就占了42题,说明五级对链表结构的考查非常集中。图形结构考了213题,图的基本概念考了281题,但链表作为基础数据结构,在GESP五级里是必考内容。

预测未来怎么考。基于2023-2026的逐年数据,指针与引用、链表这两类题在GESP五级里占比很高,且2025年指针题达到峰值25题,2026年链表题还有10题。命题趋势上,可能会继续考“节点定义+构造过程”的组合,比如给出一个更复杂的链表操作(插入、删除、反转),然后问链表类型或某个指针指向的对象。也可能考构造函数参数顺序的陷阱,比如故意把Prv和Nxt的位置换一下,或者在new时只传一个参数,让考生判断Prev和Next的默认值。如果数据不足以支撑更具体的预测,就暂不下结论,但就目前的考频和题型分布,这类“看图说话”的链表判断题在GESP五级里至少还会保持高频。

总结一下,这道题的解题心法就是:先看节点定义有没有Prev和Next,再看构造过程里Prev是否被正确赋值,最后排除循环和“指针链表”这种干扰项。只要抓住这几个关键点,答案B就呼之欲出了。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断