搜尋

首頁  >  問答  >  主體

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

  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++;
    }
阿神阿神2785 天前922

全部回覆(2)我來回復

  • 高洛峰

    高洛峰2017-04-18 10:50:47

    雷雷 雷雷

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-18 10:50:47

    為什麼會斷鍊呢?
    f指向原來的first,將新的newNode設定為first。
    這時候就判斷,如果原來的鍊錶就是空的,那麼last也就是first咯。
    如果不為空,那麼就是將f<原來的首節點>的prev就指向first。


    我猜你之所以覺得會斷鍊是因為,你沒看到first的next指向f。額next這個在Node已經傳進去了
    final Node newNode = new Node<>(null, e, f);
    private static class Node {

        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;
        }
    }

    回覆
    0
  • 取消回覆