[英]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.