为什么 Java 的 LinkedList 的双链表实现不会链接后面元素
阿神
阿神 2017-04-18 10:48:47
[Java讨论组]
  1. 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)
高洛峰
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 元素了。
大家讲道理

为什么会断链呢?
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;
    }
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号