#G5OBJ01. GESP C++ 五级真题客观题|链表
GESP C++ 五级真题客观题|链表
01|2025-03-L5-SC-01
链表不具备的特点是( )。
{{ select(1) }}
- 可随机访问任何一个元素
- 插入、删除操作不需要移动元素
- 无需事先估计存储空间大小
- 所需存储空间与存储元素个数成正比
02|2025-03-L5-TF-02
链表存储线性表时要求内存中可用存储单元地址是连续的。
{{ select(2) }}
- 正确
- 错误
03|2025-06-L5-SC-01
与数组相比,链表在( )操作上通常具有更高的效率。
{{ select(3) }}
- 随机访问元素
- 查找指定元素
- 在已知位置插入或删除节点
- 遍历所有元素
04|2025-09-L5-SC-01
以下哪种情况使用链表比数组更合适?
{{ select(4) }}
- 数据量固定且读多写少
- 需要频繁在中间或开头插入、删除元素
- 需要高效随机访问元素
- 存储空间必须连续
05|2025-12-L5-TF-01
数组和链表都是线性表。链表的优点是插入删除不需要移动元素,并且能随机查找。
{{ select(5) }}
- 正确
- 错误
06|2026-03-L5-TF-01
有一个存储了n个整数的线性表,分别用数组和单链表两种方式实现。在已知下标(或结点指针)的前提下,数组的随机访问是O(1),而在链表中已知某结点的指针时,在该结点之后插入一个新结点的操作也是O(1)。
{{ select(6) }}
- 正确
- 错误
07|2025-03-L5-SC-02
双向链表中每个结点有两个指针域 prev 和 next,分别指向该结点的前驱及后继结点。设 p 指向链表中的一个结点,它的前驱结点和后继结点均非空。要删除结点 p,则下述语句中错误的是( )。
{{ select(7) }}
08|2025-06-L5-SC-02
下面C++代码实现双向链表。函数 is_empty() 判断链表是否为空,如链表为空返回 true,否则返回 false。横线处不能填写( )。


{{ select(8) }}
09|2025-06-L5-SC-03
基于上题代码正确的前提下,填入相应代码完善 append(),用于在双向链表尾部增加新节点,横线上应填写( )。

{{ select(9) }}
10|2025-09-L5-SC-02
函数 removeElements 删除单链表中所有结点值等于 val 的结点,并返回新的头结点,其中链表头结点为 head,则横线处填写( )。

{{ select(10) }}
11|2025-09-L5-SC-03
函数 hasCycle 采用Floyd快慢指针法判断一个单链表中是否存在环,链表的头节点为 head,即用两个指针在链表上前进:slow 每次走 1 步,fast 每次走 2 步,若存在环,fast 终会追上 slow(相遇);若无环,fast 会先到达 nullptr,则横线上应填写( )。

{{ select(11) }}
12|2025-09-L5-TF-04
链表通过更改指针实现高效的结点插入与删除,但结点访问效率低、占用内存较多,且对缓存利用不友好。
{{ select(12) }}
- 正确
- 错误
13|2025-12-L5-SC-01
对如下定义的循环单链表,横线处填写( )。

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

{{ select(14) }}
15|2025-12-L5-SC-03
下面关于单链表和双链表的描述中,正确的是( )。

{{ select(15) }}
- 双链表删除指定节点是O(1),单链表是O(1)
- 双链表删除指定节点是O(n),单链表是O(1)
- 双链表删除指定节点是O(1),单链表是O(n)
- 双链表删除指定节点是O(n),单链表是O(n)
16|2026-03-L5-SC-01
关于单链表、双链表和循环链表,下列说法正确的是( )。
{{ select(16) }}
- 在单链表中,若已知任意结点的指针,则可以在O(1)时间内删除该结点。
- 循环链表中一定不存在空指针。
- 在循环双链表中,尾结点的next指针一定为nullptr。
- 在带头结点的循环单链表中,判定链表是否为空只需判断头结点的next是否指向自身。
17|2026-03-L5-SC-02
双向循环链表中要在结点p之前插入新结点s(均非空),以下指针操作正确的是( )。
{{ select(17) }}
18|2026-03-L5-SC-03
下面函数用“哑结点”统一处理删除单向链表中的头结点与中间结点。横线处应填( )。

{{ select(18) }}
19|2026-06-L5-SC-01
假设 head != nullptr,下面是实现单向循环链表在头节点后插入新节点的代码,横线处应填入( )。

{{ select(19) }}
20|2026-06-L5-TF-01
数组的存储空间在物理上通常是连续的,而链表的结点可以存储在不连续的内存空间中。
{{ select(20) }}
- 正确
- 错误
21|2026-06-L5-SC-02
下面代码遍历并输出一个循环单链表,其中 head 指向链表的第一个节点,横线处应填入的是( )。

{{ select(21) }}
22|2026-06-L5-SC-03
双链表结点定义如下,若要删除双链表中的中间结点(非首尾节点)p,下面写法正确的是( )。

{{ select(22) }}
23|2025-03-L5-TF-01
要删除单链表中某个结点 p(非尾结点),但不知道头结点,可以先令 q = p->next,将 q 的数据拷贝到 p 的数据部分,再将 p->next 设置为 q->next,最后删除 q。
校注版说明(作答前常显):校注版:官网原文在重连p->next后仍写“删除p->next”,按字面会删除新的后继并泄漏原后继;学生训练版仅明确先保存原后继q,复制、重连后delete q。学生判题答案仍T;官网原文与官方T永久保留。
{{ select(23) }}
- 正确
- 错误
24|2025-03-L5-SC-03
假设双向链表包含头尾哨兵结点(不存储实际内容),分别为 head 和 tail,链表中每个结点有两个指针域 prev 和 next,分别指向该结点的前驱及后继结点。下面代码实现了一个空的双向链表,横线上应填的最佳代码是( )。

校注版说明(作答前常显):校注版:官网原题两处写作“循环链表”,但官方答案B只建立非循环双向哨兵链表的head->next=tail与tail->prev=head;学生训练版仅删除两处“循环”,不改代码、选项、考点、难度或官方答案。学生判题答案B;官网原题与官方B永久保留。
{{ select(24) }}
25|2025-06-L5-SC-04
下列C++代码用循环链表解决约瑟夫问题,即假设 n 个人围成一圈,从第一个人开始数,每次数到第 k 个人就出圈,输出最后留下的那个人的编号。横线上应填写( )。


{{ select(25) }}
26|2025-12-L5-TF-03
在单链表中,已知指针p指向要删除的结点(非尾结点),想在O(1)删除p,正确做法是先保存q=p->next,再用q的数据覆盖p的数据,令p->next=q->next,然后delete q。
校注版说明(作答前常显):官网原文与官方答案T永久保留。学生训练版最小校注操作顺序:先保存原继任结点q,再复制q的数据、重连p->next=q->next,并delete q;学生答案仍为T。
{{ select(26) }}
- 正确
- 错误
27|2026-06-L5-TF-02
带哨兵头尾节点的双向循环链表,在表头插入节点 p,以下四步操作无论什么顺序执行结果都正确。

{{ select(27) }}
- 正确
- 错误























































