首页 > 其他 > 详细

单向链表为什么要用一个辅助变量遍历

时间:2021-04-14 10:12:22      阅读:39      评论:0      收藏:0      [点我收藏+]

对于链表添加操作,假如不考虑按序号添加,则可以写一个简单的方法:

public void add(HeroNode heroNode) {

        //因为head节点不能动,因此我们需要一个辅助变量遍历
        HeroNode temp = head;
        //遍历链表,找到最后
        while (true) {
            //找到链表的最后
            if (temp.next == null) {
                break;
            }
            //没有找到最后,就讲temp后移
            temp = temp.next;
        }
        //当退出while循环时,temp就指向了链表的最后
        temp.next = heroNode;
    }

这里可能存在一个疑问:局部变量temp在出栈以后就被JVM垃圾回收了,那

temp.next = heroNode;

这句代码中间的细节如何理解?

可以画出JVM的栈结构和堆结构来阐明:

技术分享图片

HeroNode temp = head;

只是创建了一个局部变量temp,局部变量在Java中均存放于栈中,其指向了堆空间中的head(head在属性处直接初始化了)。此时temp.next就是head.next,即Node1。所以,temp.next = heroNode也就是把此时堆中对象的指针指向了传入的形参heroNode。所以即便temp被JVM回收,依然完成了辅助创建指针的作用。

单向链表为什么要用一个辅助变量遍历

原文:https://www.cnblogs.com/LostSecretGarden/p/14656017.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!