You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode扁平化多级双向链表解法保存head.next的作用详解

问题解答

覆盖发生的具体逻辑

这段递归解法依赖全局变量pre记录上一个已处理完成的节点,处理子链时会自动修改父节点的next指针,具体覆盖过程如下:

  1. 在调用flatten(head.child)之前,刚执行完pre = head赋值,此时pre指向当前正在处理的父节点
  2. 进入flatten(head.child)的递归逻辑后,只要child不为空,就会触发指针绑定逻辑:
if (pre != null) {
    pre.next = head; // 这里的pre是父节点,head是child链表的第一个节点
    head.prev = pre;
}
  1. 这一步执行完成后,父节点原本的next值(同级的下一个节点)就被直接覆盖为child节点,原始的next引用直接丢失。

提前保存head.next的必要性

如果没有提前把原始head.next存入临时变量next,当child整条子链处理完成后,你就无法再获取到当前节点原本的同级后续节点,后续的flatten(next)调用就无法执行,会直接丢失所有原本在当前节点后面的同级节点以及它们的子链。
举个简单的示例验证:假设存在节点A,A的next是同级节点B,A的child是子节点C。如果不提前保存A的next:

  • 处理A时,pre赋值为A,直接调用flatten(C)
  • 递归处理C时会把A的next修改为C,此时原本A指向B的引用被覆盖丢失
  • 处理完C的整条子链后,无法再找到B节点,最终的扁平化结果会缺失B以及B之后的所有节点。

提前保存head.next就是为了在父节点next被修改前,把原始的同级后续节点引用留存下来,保证所有层级的所有节点都能被完整遍历拼接,不会出现节点丢失的问题。

内容的提问来源于stack exchange,提问作者Rishikrishna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 14:57:04