索千 2023-09-17 21:15 采纳率: 74.4%
浏览 6
已结题

java的链表后插入问题

链表的其他地方没问题,就是在插入这里非常不解,疑问在注释里了,为什么直接循环cur=cur.next,外面再cur=node结果不行?cur不是移动指针而已吗?最后再将新结点赋给cur,作用跟temphead.next不是一样的吗?temphead的作用在哪里?期待详细解答

img

img

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-09-17 23:48
    关注

    引用 皆我百晓生 小程序回复内容作答:
    在 Java 中,链表的插入操作需要注意指针的移动和节点的连接。根据你的描述,有一个部分插入链表的代码,你对其中的一些细节产生了疑问。让我来解答你的疑问:

    Node cur = head;
    while (cur.next != null) {
        // 为什么直接循环cur=cur.next,外面再cur=node结果不行?
        cur = cur.next;
    }
    // cur不是移动指针而已吗?
    // 最后再将新结点赋给cur,作用跟temphead.next不是一样的吗?
    cur.next = node;
    

    首先,让我们来理解这段代码的逻辑。这段代码的目的是在链表的末尾插入一个新节点。代码中,我们使用 cur 变量来迭代遍历链表,直到找到最后一个节点。

    接下来,回答你的问题:

    1. 为什么直接循环 cur=cur.next,外面再 cur=node 结果不行?

      这是因为在循环中,我们需要将 cur 不断移到链表的下一个节点,直到达到链表末尾(也就是 cur.nextnull)。而在循环结束后,cur 已经指向了链表的最后一个节点。所以,如果你直接在循环内部使用 cur = node,会使得 cur 指向了 node 对应的新节点,而不是链表末尾的节点。因此,我们需要在循环外部将新节点赋值给 cur.next,从而将新节点连接到链表的末尾。

    2. cur 不是移动指针而已吗?最后再将新节点赋给 cur,作用跟 temphead.next 不是一样的吗?

      cur 确实是一个移动指针,用于遍历链表。但是,需要注意的是,链表的头节点 head 是不能直接修改的,因为它是整个链表的入口。而 cur 是在遍历过程中用来迭代的临时指针。

      当我们找到链表的最后一个节点时,我们需要将新节点插入链表。通过将新节点赋给 cur.next,就实现了将新节点插入到链表的末尾,并建立了与前一个节点的连接关系。而 temphead.next 则是新节点插入之前链表的最后一个节点,用于建立插入位置之前节点的连接关系。

    综上所述,temphead 的作用是一个辅助节点,用于保存链表的头节点,并在插入新节点时用于建立前一个节点和新节点的连接关系。cur 是用于遍历链表的临时指针,最后重新赋值给 cur.next 实现新节点的插入。

    希望这样的解答能够解决你的疑问。如果还有其他问题,请随时提问。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月26日
  • 已采纳回答 9月18日
  • 创建了问题 9月17日

悬赏问题

  • ¥15 船舶旋回实验matlab
  • ¥30 SQL 数组,游标,递归覆盖原值
  • ¥15 为什么我的数据接收的那么慢呀有没有完整的 hal 库并 代码呀有的话能不能发我一份并且我用 printf 函数显示处理之后的数据,用 debug 就不能运行了呢
  • ¥15 有关于推荐系统jupyter
  • ¥20 gitlab 中文路径,无法下载
  • ¥15 用动态规划算法均分纸牌
  • ¥30 udp socket,bind 0.0.0.0 ,如何自动选取用户访问的服务器IP来回复数据
  • ¥15 关于树的路径求解问题
  • ¥15 yolo在训练时候出现File "D:\yolo\yolov5-7.0\train.py"line 638,in <module>
  • ¥30 戴尔inspiron独显直连