簡體   English   中英

在LinkedList的開頭插入的時間復雜度

[英]Time complexity of inserting at the beginning of LinkedList

我很好奇在LinkedList的開頭插入一個元素的時間復雜性。 我理解LinkedList本身會將現有元素的一個索引向右移動,但要做到這一點,它會進行與列表中現有元素一樣多的迭代嗎?

另外,是開頭offerFirst插入的最佳方式嗎?

在常量時間內添加到LinkedList的前面:

public void addFirst(E e) 
{
    addBefore(e, header.next);
}

private Entry<E> addBefore(E e, Entry<E> entry) 
{
    Entry<E> newEntry = new Entry<E>(e, entry, entry.previous);
    newEntry.previous.next = newEntry;
    newEntry.next.previous = newEntry;
    size++;
    modCount++;

    return newEntry;
}

它不受需要移位元素的數組的支持。 如您所見,所有需要完成的工作都是一組參考重新分配。

編輯:

為了解決您對offerFirst的擔憂,它的全部內容是:

public boolean offerFirst(E e) 
{
     addFirst(e); 

     return true;
}

所以,正如我在評論中所說,只有在你想要返回一個boolean時才使用它。

在列表的前面插入一個項目只會做兩件事(都非常輕量級):

1)更新HEAD指針(這是告訴我們第一個元素在哪里的指針)

2)將新元素的NEXT指針設置為舊的HEAD元素。

這是一個非常輕量級的操作,代表了鏈接列表的優勢之一。

我不太了解Java,但由於offerFirst旨在將一個元素添加到列表的前面,因此它可能是最好的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM