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

Python链表删除非首尾节点时两种写法的差异及生效原因咨询

两种写法的核心差异与原理

两种写法的本质区别是修改的对象完全不同:

  • node = node.next修改的是临时引用变量node的指向,没有改动链表本身的结构
  • node.next = node.next.next修改的是node指向的链表节点的next属性,直接改动了链表的节点关联关系

为什么第一种写法无法删除节点

Python里的变量本质是对内存对象的引用,你声明的node只是一个临时用来访问、操作链表节点的「指针标签」:
你执行node = node.next的时候,只是把贴在原节点上的node标签撕下来,贴到了下一个节点上,链表中所有节点的关联关系没有发生任何变化,当然不可能实现删除节点的效果。

举个实际的例子:假设现在链表结构是节点A → 节点B → 节点C → 节点D,你要删除节点B,此时node变量正指向节点A:

  • 执行node = node.next后,node变量现在指向节点B,链表还是A→B→C→D,没有任何改动
  • 执行node.next = node.next.next后,节点A的next属性从指向节点B改成了指向节点C,链表变成A→C→D,节点B就被成功从链表中移除了。

如果你的需求是删除node当前指向的非首尾节点,第一种写法更是完全不相关,正确的删除当前节点的写法是先覆盖值再改next:

node.val = node.next.val
node.next = node.next.next

内容的提问来源于stack exchange,提问作者Henry N.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:18:04