为什么 Java 的 LinkedList 的双链表实现不会链接后面元素
阿神
阿神 2017-04-18 10:48:47
0
2
918
  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++;
    }
阿神
阿神

闭关修行中......

répondre à tous(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 元素了。
大家讲道理

Pourquoi le lien est-il rompu ?
f pointe vers l'original en premier et définit le nouveau newNode en premier.
À l'heure actuelle, on estime que si la liste chaînée d'origine est vide, alors le dernier est également le premier.
S'il n'est pas vide, alors le précédent du premier nœud f<original>


Je suppose que la raison pour laquelle vous pensez que le lien est rompu est parce que vous n'avez pas vu en premier les points suivants vers f. Euh, next a été passé dans 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;
    }
}
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal