8.在單向鏈結串列(Singly Linked List)中,存取第 k 個 節點時,其時間複雜度為 A(1)。
(A)O
(B)X

答案:登入後查看
統計: A(7), B(9), C(0), D(0), E(0) #3678224

詳解 (共 1 筆)

#7210682

【解題思路】

關鍵字:單向鏈結串列、存取第 k 個節點、時間複雜度、O(1)

要解這題先回到資料結構的本質:
單向鏈結串列的每個節點只知道「下一個」的位置,沒有辦法像陣列一樣用索引直接跳到目標位置。

因此如果你要找第 k 個節點,你必須從頭開始:

head → node1 → node2 → node3 → … → node(k)

這樣的成本是 走 k 次,因此時間複雜度為:

O(k) ≈ O(n)(最壞情況 k = n)

O(1) 是陣列 Array 的特性,可以靠索引一次跳到位置。
單向鏈結串列做不到。

所以題目說是 O(1) → 錯。

【為什麼其他選項不正確(逐一破題)】

(A) O = 錯
O(1) 代表「不用看資料大小,一步就能找到」,這只有陣列才做得到。

(B) X = 對
因為 Singly Linked List 存取第 k 個節點必須逐一走訪,時間複雜度是 O(k),不是 O(1)。

【延伸知識】

各資料結構的存取特性比較:

資料結構 存取第 k 個元素 插入/刪除
Array(陣列) O(1) O(n)
Singly Linked List(單向鏈結串列) O(k) O(1)(已知位置後)
Doubly Linked List(雙向鏈結串列) O(k) O(1)(已知位置後)

重點:
鏈結串列插入刪除快(O(1)),但查詢慢(O(n))。

【記憶技巧】

口訣:
「陣列查詢快,鏈結慢慢踩。」
「串列找 k 步一步,陣列直接瞬間跳。」

0
0