LinkedList添加和删除方法的源码分析超详细

我们基于下面这段代码进行分析

进入add方法后调用的是linkLast方法

 

这是add方法真正的底层逻辑,首先将last值赋给l节点,此时的l为null,然后再创建新节点的时候将l作为前向指针传入,将节点中的next指针也赋值为null,之后让last节点指向新节点。然后进行if判断如果l为null就将first也指向新节点。这是第一次添加的过程

下面我们看第二次添加的过程 ,最终还是执行linkLast方法,只不过此时的last指向第一个节点,所以l也指向第一个节点,然后创建一个新节点将l传入,所以新节点中的prev指向第一个节点,接着将last的指向改为新节点。由于此时的l不为null,所以进入else,将首节点中的next执向新节点接着我们看一下它的remove方法,默认删除的首元素

首先将first的引用保存起来,真正执行删除方法的是unlinkFirst().

 首先将节点中的值和next指针保存起来,接着将他们置为null,通过GC,然后将头节点的指向改为next,此时的next不为null进入else,然后将next的prev置为null,这样头节点就和下一个节点断开了联系

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值