#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) }}

  • SC-02选项A代码
  • SC-02选项B代码
  • SC-02选项C代码
  • SC-02选项D代码

08|2025-06-L5-SC-02

下面C++代码实现双向链表。函数 is_empty() 判断链表是否为空,如链表为空返回 true,否则返回 false。横线处不能填写( )。

SC-02题干代码第1部分

SC-02题干代码第2部分

{{ select(8) }}

  • SC-02选项A代码
  • SC-02选项B代码
  • SC-02选项C代码
  • SC-02选项D代码

09|2025-06-L5-SC-03

基于上题代码正确的前提下,填入相应代码完善 append(),用于在双向链表尾部增加新节点,横线上应填写( )。

SC-03题干代码

{{ select(9) }}

  • SC-03选项A代码
  • SC-03选项B代码
  • SC-03选项C代码
  • SC-03选项D代码

10|2025-09-L5-SC-02

函数 removeElements 删除单链表中所有结点值等于 val 的结点,并返回新的头结点,其中链表头结点为 head,则横线处填写( )。

SC-02题干代码

{{ select(10) }}

  • SC-02选项A代码
  • SC-02选项B代码
  • SC-02选项C代码
  • SC-02选项D代码

11|2025-09-L5-SC-03

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

SC-03题干代码

{{ select(11) }}

  • SC-03选项A代码
  • SC-03选项B代码
  • SC-03选项C代码
  • SC-03选项D代码

12|2025-09-L5-TF-04

链表通过更改指针实现高效的结点插入与删除,但结点访问效率低、占用内存较多,且对缓存利用不友好。

{{ select(12) }}

  • 正确
  • 错误

13|2025-12-L5-SC-01

对如下定义的循环单链表,横线处填写( )。

SC-01题干代码

{{ select(13) }}

  • SC-01选项A代码
  • SC-01选项B代码
  • SC-01选项C代码
  • SC-01选项D代码

14|2025-12-L5-SC-02

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

SC-02题干代码

{{ select(14) }}

  • SC-02选项A代码
  • SC-02选项B代码
  • SC-02选项C代码
  • SC-02选项D代码

15|2025-12-L5-SC-03

下面关于单链表和双链表的描述中,正确的是( )。

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) }}

  • SC-02选项A代码
  • SC-02选项B代码
  • SC-02选项C代码
  • SC-02选项D代码

18|2026-03-L5-SC-03

下面函数用“哑结点”统一处理删除单向链表中的头结点与中间结点。横线处应填( )。

SC-03题干代码

{{ select(18) }}

  • SC-03选项A代码
  • SC-03选项B代码
  • SC-03选项C代码
  • SC-03选项D代码

19|2026-06-L5-SC-01

假设 head != nullptr,下面是实现单向循环链表在头节点后插入新节点的代码,横线处应填入( )。

SC-01题干代码

{{ select(19) }}

  • SC-01选项A代码
  • SC-01选项B代码
  • SC-01选项C代码
  • SC-01选项D代码

20|2026-06-L5-TF-01

数组的存储空间在物理上通常是连续的,而链表的结点可以存储在不连续的内存空间中。

{{ select(20) }}

  • 正确
  • 错误

21|2026-06-L5-SC-02

下面代码遍历并输出一个循环单链表,其中 head 指向链表的第一个节点,横线处应填入的是( )。

SC-02题干代码

{{ select(21) }}

  • SC-02选项A代码
  • SC-02选项B代码
  • SC-02选项C代码
  • SC-02选项D代码

22|2026-06-L5-SC-03

双链表结点定义如下,若要删除双链表中的中间结点(非首尾节点)p,下面写法正确的是( )。

SC-03结点定义

{{ select(22) }}

  • SC-03选项A代码
  • SC-03选项B代码
  • SC-03选项C代码
  • SC-03选项D代码

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,分别指向该结点的前驱及后继结点。下面代码实现了一个空的双向链表,横线上应填的最佳代码是( )。

SC-03题干代码

校注版说明(作答前常显):校注版:官网原题两处写作“循环链表”,但官方答案B只建立非循环双向哨兵链表的head->next=tail与tail->prev=head;学生训练版仅删除两处“循环”,不改代码、选项、考点、难度或官方答案。学生判题答案B;官网原题与官方B永久保留。

{{ select(24) }}

  • SC-03选项A代码
  • SC-03选项B代码
  • SC-03选项C代码
  • SC-03选项D代码

25|2025-06-L5-SC-04

下列C++代码用循环链表解决约瑟夫问题,即假设 n 个人围成一圈,从第一个人开始数,每次数到第 k 个人就出圈,输出最后留下的那个人的编号。横线上应填写( )。

SC-04题干代码第1部分

SC-04题干代码第2部分

{{ select(25) }}

  • SC-04选项A代码
  • SC-04选项B代码
  • SC-04选项C代码
  • SC-04选项D代码

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,以下四步操作无论什么顺序执行结果都正确。

TF-02题干代码

{{ select(27) }}

  • 正确
  • 错误