为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 Java 的 LinkedList 的双链表实现不会链接后面元素

为什么 Java 的 LinkedList 的双链表实现不会链接后面元素

互换的青春 2019-02-21 17:37:06
JDK7中 LinkedList private 方法 private void linkFirst(E e)在新添加元素时链表不会断裂? 代码来源于 JDK7 private void linkFirst(E e) { final Node<E> f = first; final Node<E> newNode = new Node<>(null, e, f); first = newNode; if (f == null) last = newNode; else f.prev = newNode; // 此处没有执行 newNode.next = f; newNode.next 不会链接后面的元素 size++; modCount++; }
查看完整描述

2 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

private static class Node<E> {
    E item;
    Node<E> next;
    Node<E> prev;

    Node(Node<E> prev, E element, Node<E> next) {
        this.item = element;
        this.next = next;
        this.prev = prev;
    }
}
final Node<E> newNode = new Node<>(null, e, f); // 构造函数的第3个参数不就是 next 元素了。
查看完整回答
反对 回复 2019-03-01
?
饮歌长啸

TA贡献1951条经验 获得超3个赞

为什么会断链呢?
f指向原来的first,将新的newNode设置为first。
这个时候就判断,如果原来的链表就是空的,那么last也就是first咯。
如果不为空,那么就是将f<原来的首节点>的prev就指向first。


我猜你之所以觉得会断链是因为,你没看到first的next指向f。额next这个在Node中已经传进去了
final Node<E> newNode = new Node<>(null, e, f);
private static class Node<E> {

    E item;
    Node<E> next;
    Node<E> prev;

    Node(Node<E> prev, E element, Node<E> next) {
        this.item = element;
        this.next = next;
        this.prev = prev;
    }
}
查看完整回答
反对 回复 2019-03-01
  • 2 回答
  • 0 关注
  • 740 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号