单链表局部反转中dummy与before引用关联的技术疑问
为什么修改
before节点的属性会影响dummy链表? 核心原因很简单:before最终指向的是dummy链表链条中的一个节点,而非独立的新链表。你修改的是这个节点的属性,而非before变量的指向,所以自然会反映到整个dummy链表中。
结合你的例子(输入head=[1,2,3,4,5]、left=2、right=4)拆解:
- 初始时
dummy是包含-1的头节点,它的next指向原链表的1节点,形成链条:-1 -> 1 -> 2 -> 3 -> 4 -> 5,此时before和dummy指向同一个节点(-1节点)。 - 执行循环
before = before.next后,before变量的指向从-1节点切换到了1节点——注意,这个1节点是dummy链表链条里的一环,不是新创建的独立节点。 - 反转操作完成后,你执行了
before.next = prev和before.next.next = current:before.next = prev是把1节点的next属性改成了反转后的段头4节点;before.next.next = current是把反转段的原头(现在的尾)2节点的next属性改成了5节点。
- 因为
1节点本身就是dummy链表的一部分,修改它的next属性直接改变了整个链条的连接关系,所以dummy链表的结构自然变成了-1 -> 1 -> 4 -> 3 -> 2 -> 5。
你之前的误解在于:以为before = before.next让before和dummy彻底无关,但实际上只是before变量指向了dummy链表内部的另一个节点,这个节点仍然属于dummy的链条。你修改的是这个节点的属性,而非before变量的指向,所以整个dummy链表的结构会跟着变化。
内容的提问来源于stack exchange,提问作者Luke
相关产品推荐
相关产品推荐

