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

为何Java链表insertAfter方法中需创建tmpNext临时变量?

单向链表插入节点的逻辑解释

先看你贴的这段Java代码,这是单向链表中在当前节点后插入新节点的标准实现:

public void insertAfter(IntNode nodeLoc) {
      IntNode tmpNext;

      tmpNext = this.nextNodeRef;
      this.nextNodeRef = nodeLoc;
      nodeLoc.nextNodeRef = tmpNext;
   }

咱们用实际场景拆解你的疑问:假设当前节点是A,A原本的下一个节点是B,现在要把新节点C(也就是参数nodeLoc)插到A后面,最终要形成A→C→B的链表结构。

  • 为什么不能直接写this.nextNodeRef = nodeLoc;?
    如果只写这一句,A的下一个节点直接变成C,但原来的B以及B后面的所有节点都会彻底丢失——因为没有任何引用指向它们了,链表直接从A→C就断了,原来的后续链全没了。

  • 为什么要用临时变量保存原节点引用?
    当你执行this.nextNodeRef = nodeLoc;时,A原来的nextNodeRef(也就是指向B的引用)会被覆盖成指向C。如果不在覆盖前把B的引用存到tmpNext里,之后就再也找不到B了,所以必须提前存好这个关键引用。

  • 为什么要把临时变量存入新节点的nextNodeRef?
    这一步是为了把原来的后续链接回来。新节点C的下一个节点必须是原来的B,这样整个链表才能保持连续:A指向C,C指向B,原来的链表结构完全保留,只是在中间插入了C。如果不做这一步,C的下一个节点就是null,B还是会丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:42:02