码迷,mamicode.com
首页 > 其他好文 > 详细

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

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

标签:lazy   while   src   初始化   mic   img   http   疑问   code   

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

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回收,依然完成了辅助创建指针的作用。

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

标签:lazy   while   src   初始化   mic   img   http   疑问   code   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!