GESP 五级 · GESP 202503 C++ 五级 第 3 题

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

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

题目

假设双向循环链表包含头尾哨兵结点(不存储实际内容),分别为 head 和 tail,链表中每个结点有两个指针域 prev 和 next,分别指向该结点的前驱及后继结点。下面代码实现了一个空的双向循环链表,横线上应填的最佳代码是( )。

// 链表结点
template <typename T>
struct ListNode {
    T data;
    ListNode<T>* prev;
    ListNode<T>* next;

    // 构造函数
    explicit ListNode(const T& val = T())
        : data(val), prev(nullptr), next(nullptr) {}
};

struct LinkedList {
    ListNode<T>* head;
    ListNode<T>* tail;
};

void InitLinkedList(LinkedList* list) {
    list->head = new ListNode<T>();
    list->tail = new ListNode<T>();     
    // 在此处填入代码
}

A.

list->head->prev = list->head;
list->tail->prev = list->head;

B.

list->head->next = list->tail;
list->tail->prev = list->head;

C.

list->head->next = list->tail;
list->tail->next = list->head;

D.

list->head->next = list->tail;
list->tail->next = nullptr;
答案:B

考点

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

解题思维

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

常见错误

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

详细解析(节选)

【考点】双向循环链表(哨兵结点)|指针赋值

1. 🎯 考纲定位

GESP五级数据结构模块,考点是哨兵结点的闭环连接。命题人卡住的是考生对"循环链表"与"双向链表"两个概念的理解——五级开始要求能正确构造双向循环结构,很多考生能写出单向循环,但双向循环的 prev 指针容易遗漏或接错。

同考点真题

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