已知一个带有表头结点的双向循环链表 L,结点结构为 prev|data|next,prev 和 next 分别是指向其直接前驱和直接后继结点的指针。现要删除指针 p 所指的结点,正确的语句序列是( )。
目标
识别循环链表删除操作中的双向摘链和仅剩一个数据节点时的尾指针更新。
前置知识
建议先掌握带头结点循环单链表与循环双链表的空表、首元和尾元关系。
环境、输入与预期输出
- 环境:任意现代浏览器;建议准备纸笔或一份错题记录。
- 输入:本页按源文件顺序整理的 2 道选择题。
- 预期输出:一份独立作答记录,以及每道错题的错误原因和正确推理。
作答方法
- 阅读题面后点击一个选项,先写下选择依据;
- 点击“提交答案”,再核对对错、正确答案和题解;
- 做错的题点击“重新作答”后再次推导,直到能说明其余选项为什么不成立;
- 完成全部题目后再展开组件生成的答案总览,避免只记答案字母。
选择题
答题进度已答 0/2正确 0
难度★★★考点循环链表、链表删除、尾指针标识
ds-2021-01已知头指针 h 指向一个带头结点的非空单循环链表,结点结构为
------------
|data |next|
------------
其中 next 是指向直接后继结点的指针,p 是尾指针,q 是临时指针。现要删除该链表的第一个元素,正确的语句序列是( )。
答案总览(建议完成全部题目后查看)
- 第 1 题:D
- 第 2 题:D
完成清单
思考题
- 循环结构为什么不能使用 next == NULL 判断表尾?
- 删除唯一数据节点后,头指针、头结点和尾指针分别应指向哪里?
- 循环双链表删除已知节点时,需要修复哪两个相邻节点?
复盘
- 我最容易在哪个前提上出错:结构类型、是否带头结点、是否循环、还是是否已知目标节点?
- 我是否能画出链接变化或写出移动次数,而不是只凭关键词选择?
- 哪道题的错误选项最有迷惑性?它利用了哪个常见概念混淆?