如果将双向链表的最后一个结点的下一项指针指向第一个结点,第一个结点的前一项指针指向最后一个结点,则该双向链表构成循环链表。
函数指针:bool (*Fx)(int) 声明一个指向"接收int返回bool"的函数的指针,可作为参数传递给其他函数(回调机制)。
函数指针和普通指针不同,函数指针指向的是代码段中的函数入口地址。声明格式:返回类型 (*指针名)(参数列表)。
【考点】循环链表|链表结构|指针操作
1. 考纲定位 五级 C++ 考纲中,链表是必考模块,但命题人借“双向链表变循环链表”的定义,考察考生对数据结构核心概念的理解——多数考生只背了线性链表的操作,对循环链表的“首尾相接”定义模糊,这是五级考生最明显的知识盲区。
2. 解题思维 解题时先定位两个术语:线性双向链表头尾指针均指向空;循环双向链表头尾指针互指。题目给出的操作(last->next = first且first->prev = last)正是将线性双向链表“闭环”的标准定义,因此直接判定为正确。
3. 陷阱拆解 选项 B 的设计利用考生“只知单向循环”或“忽略双向性”的误区,试图把单向循环链表(只需改last->next)混淆进来;或者把“头尾互指”当成单向链表特性。题目最阴险的细节是“双向链表”四个字——若考生只背了“循环链表”的通用定义而忘了“双向”需要在两个方向都闭环,就会误选 B。
4. 反命题思维 若题目改为“若只将最后一个结点的下一项指向第一个结点,则该双向链表构成循环链表”,答案必为错,因为单向闭环不足以构成双向循环链表。刷到类似题时,先问自己“双向链表和单向链表在循环定义上差在哪”,就能避开陷阱。