双向链表中有两个指针域 llink 和 rlink,分别指向该结点的前驱及后继。设 $p$ 指向链表中的一个结点,它的左右结点均非空。现要求删除结点 $p$,则下面语句序列中错误的是( )。
这题考双向链表删除结点的指针重连。拿到题先想:删了p,p的前驱rlink得接p的后继,p的后继llink得接p的前驱。然后看选项里指针赋值的方向是不是反了,再想如果先改后继的前驱指回自己,链表就断了。
最容易错在把‘后继的前驱’写成指向‘后继自己’,或者把‘前驱的后继’写成指向‘前驱自己’。比如A选项里p->rlink->llink = p->rlink,这行代码让p的后继的llink指向了p的后继自己,而不是p的前驱,导致链表断裂。还有学生可能误以为只要最后delete p就行,其实重连顺序错了,delete之前链表就已经断了。
这道题考查双向链表中删除结点的指针重连逻辑。双向链表每个结点有两个指针域:llink指向前驱,rlink指向后继。删除结点p时,核心操作是让p的前驱的rlink指向p的后继,同时让p的后继的llink指向p的前驱,最后delete p。命题人喜欢挖‘顺序’和‘指向对象’的坑,比如把后继的前驱写成指向后继自己,或者把前驱的后继写成指向前驱自己,导致链表断裂。
正确删除语句是: p->llink->rlink = p->rlink; p->rlink->llink = p->llink; delete p;
逐项分析选项: A选项: p->rlink->llink = p->rlink; // 让p的后继的llink指向p的后继自己(错误!应指向p的前驱) p->llink->rlink = p->llink; // 让p的前驱的rlink指向p的前驱自己(错误!应指向p的后继) delete p; A完全反了——把前后指针都指向了结点自身,导致链表断裂。这是本题的错误选项。
B选项: p->llink->rlink = p->rlink; // 前驱的rlink接后继(正确) p->rlink->llink = p->llink; // 后继的llink接前驱(正确) delete p; B正确。
C选项: p->rlink->llink = p->llink; // 后继的llink接前驱(正确) p->rlink->llink->rlink = p->rlink; // 此时p->rlink->llink是前驱,再让它rlink接后继(正确) delete p; C正确,只是多了一步冗余操作。
D选项: p->llink->rlink = p->rlink; // 前驱的rlink接后继(正确) p->llink->rlink->llink = p->llink; // 此时p->llink->rlink是后继,再让它llink接前驱(正确) delete p; D正确,也是多了一步冗余操作。
易错点提醒: 1. 正确顺序:必须先让前驱的rlink接后继,再让后继的llink接前驱(或者反过来,但必须对应正确对象)。 2. A选项中的p->rlink->llink = p->rlink 是错的——让后继的前驱指回了后继本身,而不是前驱。 3. 学生可能误以为只要最后delete p就行,其实重连顺序错了,delete之前链表就已经断了。
考频趋势:线性结构在题库中仅考过4题,但链表相关题目高达81题,覆盖从GESP五级到2026年的多个级别,2024年单年就有26题,2025年16题,说明链表是高频考点。双向链表删除操作属于链表基础中的经典题型,历年NOIP普及组、提高组初赛均出现过,命题人常通过混淆‘前驱’和‘后继’的指向关系来设置陷阱。
预测:基于2024、2025年链表题目数量激增的趋势,未来几年链表相关题目仍将是高频考点。命题人可能会继续围绕‘删除’‘插入’‘遍历’等基础操作设置变式,比如单向链表删除、带头结点的链表删除、或者在复杂结构中定位并删除结点。暂无足够依据预测具体年份或题型,但链表操作的正确指针重连逻辑始终是必考内容。