LinkedList的add源码(1)

LinkedList的add源码

public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<>();
        list.add(1);
    }

点击查看add方法

public boolean add(E e) {
        linkLast(e);
        return true;
    }

再查看linkLast方法

/**
     * Links e as last element.
     */
    void linkLast(E e) {
        final Node<E> l = last;
        final Node<E> newNode = new Node<>(l, e, null);
        last = newNode;
        if (l == null)
            first = newNode;
        else
            l.next = newNode;
        size++;
        modCount++;
    }

因为我们添加没有指定下标,所以就是添加在最后。

/**
     * Pointer to last node.
     * Invariant: (first == null && last == null) ||
     *            (last.next == null && last.item != null)
     */
    transient Node<E> last;

代码中的last我们可以通过注释得知这是指向最后一个节点的。
那我们可以轻易知道这段代码的思路了,先创建一个常量l指向尾节点,然后新建newNode节点,newNode的值是添加的元素,newNode.prev是l指向的节点,此时newNode已经指向了上一个节点l,但是l还没有指向newNode,所以l在非空的情况下就指向了newNode节点,同时last指向了newNode,此时newNode节点就是当前链表的最后一个节点了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值