第 4 章

鏈結串列:彈性串接的思維

不是所有資料都適合整整齊齊排成一列。當內容常常要插入、刪除、重接順序時,重點就不再是位置固定,而是彼此怎麼串起來。

Linked List

預計閱讀時間:約 5 分鐘

專案管理 系統思考

本章開場

想像你正在安排一趟多站點的旅行。原本行程是台北、台中、台南、高雄,但朋友臨時建議你在中間加一站嘉義。若整份計畫是照固定格子排好,新增這一站可能得把後面全部重排;但如果你的安排方式是「這一站接下一站」,加進去就相對自然。

鏈結串列處理的,就是這種經常變動、需要重新串接的情境。

本章要解決的問題

當資料不是重點放在第幾格,而是重點放在前後關係時,我們該怎麼安排?尤其在中間插入新資料、移除舊資料很常發生時,固定位置式的結構就不一定理想。

核心概念

鏈結串列可以把每一筆資料想成一個節點,每個節點知道下一個節點是誰。資料不是靠固定位置排在一起,而是靠「連結」接在一起。這種方式的直覺很像接龍,一個接一個,順著線索往後走。

它的優點是調整彈性高。若你想在中間插入一筆資料,不一定需要把後面所有資料整批搬動,只要把前後連結重新接好即可。刪除資料時也是類似的思考:把原本通往它的路改接到下一個節點。

鏈結串列不是在追求「一眼看到第幾格」,而是在追求「改動時不必整排重來」。
鏈結串列插入節點示意 插入前: A B C B 的下一個是 C 插入後:(加入節點 D) A B D 新節點 C B 指向 D,D 指向 C 插入 D 只需重接兩條連結——A 與 C 完全不必搬動位置
鏈結串列插入示意:在 B 與 C 之間插入 D,只需改指向關係,其他節點完全不受影響

但它也有代價。因為資料不是靠固定編號存取,你若想直接找到第 7 個節點,通常還是要從前面一路順著找過去。也就是說,它在彈性上有優勢,在快速定位特定位置上則不如陣列直觀。

這在生活中像什麼

旅行行程的中途加站、接龍式待辦安排、串珠手鍊的重新串接,都很像鏈結串列。這些情境的重點不在每個元素有固定編號,而在它和前後元素之間的連接關係。

再比如一份拜訪客戶的路線表,原本從 A 到 B 再到 C,但因為臨時改約,你要在 B 與 C 之間塞進 D。若你的安排方式本來就著重於「下一站是誰」,調整起來就比較自然。

具體例子

  1. 旅行行程插站:原定台北 → 台中 → 高雄,朋友臨時推薦嘉義,只需把「台中」的「下一站」改指向嘉義、嘉義的「下一站」改指高雄,後面不必整體重排。
  2. 播放清單插入歌曲:在串流音樂 App 的播放佇列中間插入一首歌,只要把前後連結重接,不影響其他歌曲的位置。
  3. 食譜步驟補充:寫食譜時,在「炒香蒜末」和「加入雞肉」中間補上「先醃製雞肉 10 分鐘」,只要在那個節點插入,後續步驟順序不變。
  4. 公文簽核流程加關卡:原本「申請人 → 主管 → 結案」,法規要求新增「財務審核」,只要在主管節點之後插入財務節點,流程便能延伸而毋須重建整份表單。
  5. 串珠手鍊修改:手鍊斷了一顆珠子,取下後直接把兩端重新串起;若想中間新增一顆,也只需拆開連接處,插入新珠再重接,不必整條重做。

這在工作上有什麼用

專案流程裡的審核節點、表單簽核順序、客服處理流程,有時會遇到臨時插入新步驟的需求。例如原本是「填單、主管核准、結案」,後來因稽核需求改成「填單、主管核准、財務覆核、結案」。這種流程的本質就很接近鏈結串列的思維。

另外在內容編排、教學流程設計、動態任務串接上,也常需要把某一步驟從中間抽出或插入。這時候若系統設計只仰賴固定位置,改動成本會變高;若改用串接關係來理解,思路通常更清楚。

為什麼重要

  • 它適合常常需要插入、刪除、重排的資料。
  • 它提醒我們,資料的價值有時不在位置,而在彼此的關係。
  • 它有助於理解流程節點、步驟串接與動態結構的設計方式。

鏈結串列的限制也很值得記住。它不擅長像陣列那樣直接用編號快速跳到某個位置,所以在設計時必須先想清楚,自己更在意的是調整彈性,還是快速索引。

一句話總結

鏈結串列像一節接一節的安排方式,找特定位置不算快,但中途改路線時特別靈活。

💭 捲輊三問

  1. 你的某份清單,是否常常需要在中間插入或刪除項目?如果是,鏈結串列適合它嗎?
  2. 鏈結串列讓你「記得下一個是誰」而不是「固定位置」,這個概念在你的工作流程中有沒有對應的場景?
  3. 陣列與鏈結串列各有代價,你會用什麼標準來判斷某個情境該用哪個?
下一章

有時候問題更簡單:只需要知道「有沒有」或「對應到什麼」——集合與字典給你最直接的回答。