GESP 五级 · GESP 202512 C++ 五级 第 2 题

选择题 · 答案 B · 考点:链表

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

题目

区块链技术是比特币的基础。在区块链中,每个区块指向前一个区块,构成链式列表,新区块只能接在链尾,不允许在中间插入或删除。下面代码实现插入区块添加函数,则横线处填写( )。

// 区块(节点)
struct Block {
    int index;           // 区块编号(高度)
    string data;         // 区块里保存的数据
    Block* prev;         // 指向前一个区块

    Block(int idx, const string& d, Block* p) : index(idx), data(d), prev(p) {}
};

// 区块链
struct Blockchain {
    Block* tail;

    // 初始化
    void init() {
        tail = new Block(0, "Genesis Block", nullptr);
    }

    // 插入新区块
    void addBlock(const string& data) {
        _______________  // 在此处填入代码
    }

    // 释放内存
    void clear() {
        Block* cur = tail;
        while (cur != nullptr) {
            Block* p = cur->prev;
            delete cur;
            cur = p;
        }
        tail = nullptr;
    }
};

A.

Block* newBlock = new Block(tail->index + 1, data, tail);
tail = newBlock->prev;

B.

Block* newBlock = new Block(tail->index + 1, data, tail);
tail = newBlock;

C.

Block* newBlock = new Block(tail->index + 1, data, tail->prev);
tail = newBlock;

D.

Block* newBlock = new Block(tail->index + 1, data, tail->prev);
tail = newBlock->prev;
答案:B

考点

链表 讲解 →链表 真题汇总 →

解题思维

根据上下文和C++语法规则确定空缺处应填的内容,关注函数调用参数、表达式和返回值类型。

常见错误

填空时注意语法完整性:分号、括号匹配、函数参数类型和个数、返回值类型。

详细解析(节选)

【考点】链表操作|指针赋值|结构体初始化

1. 🎯 考纲定位

GESP 五级大纲"指针与结构体"模块,命题人专卡"链表尾插法"——考生知道链表要插新节点,但分不清"tail 新节点应指向谁"和"新节点 prev 应指向谁"这两个方向,这是五级特有的指针陷阱。

同考点真题

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