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

时间:2021-04-14 12:35:54   收藏: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回收,依然完成了辅助创建指针的作用。

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!