單向鏈表基本操作的時間複雜度分析

個人博客原文主頁:
單向鏈表基本操作的時間複雜度分析


添加操作

  • 在鏈表尾部添加(addLast())需要從頭遍歷,時間複雜度爲O(n)
  • 在鏈表頭部添加(addFirst()),時間複雜度爲O(1)
  • 在鏈表任意位置添加(add(int index,E e)),平均情況下爲O(n/2)=O(n)
addLast()
addFirst()
add(int index,E e)

刪除操作

  • 刪除鏈表最後一個元素(removeLast()),需要遍歷找到最後元素的前一個元素,故時間複雜度爲O(n)
  • 刪除鏈表的第一個元素(removeFirst()),時間複雜度爲O(1)
  • 刪除鏈表中任意位置節點(remove(index)),平均情況下時間複雜度爲O(n/2)=O(n)
removeLast()
removeFirst()
remove(int index)

修改操作

由於鏈表不支持隨機訪問,需要從頭開始尋找直到找到需要修改的節點,故時間複雜度爲O(n)

set(int index,E e)

查找操作

由於鏈表不支持隨機訪問,需要從頭開始尋找直到找到需要的節點,故時間複雜度爲O(n)

get(int index)
contains(E e)

從上不難看出,關於鏈表的添加操作、刪除操作、修改操作、查找操作的時間複雜度均爲O(n),但是如果只對鏈表頭進行添加操作、刪除操作、查找操作那麼它的的時間複雜度爲均O(1)。同時在元素的前一個元素已知的情況下,能在 O(1) 時間內刪除或者添加元素,當然也取決於是單鏈表還是雙鏈表,在雙鏈表中,如果已知該元素的後一個元素,同樣可以在 O(1) 時間內刪除或者添加該元素。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章