連結串列(LinkedList)解題總結

大雜草發表於2020-11-21

連結串列基礎知識

定義

連結串列(Linked List)是一種常見的基礎資料結構,是一種線性表,但是並不會按線性的順序儲存資料,而是在每一個節點裡存到下一個節點的指標(Pointer)。

連結串列的操作

操作 時間複雜度
查詢 O(n)
插入 O(1)(僅插入本身,加上查詢就是O(n))
刪除 O(1)(僅刪除本身,加上查詢就是O(n))

連結串列型別

連結串列型別 定義
單連結串列 節點只有一個指標,指向後繼節點
雙連結串列 節點有兩個指標,一個指向前置節點,一個指向後繼節點
迴圈連結串列 連結串列首尾相連

口訣

解題口訣:一個原則,兩個考點,兩個技巧,三個注意

一個原則

一個原則:畫圖!畫圖!畫圖!重要的事情要說三遍。連結串列的題目很容易把人繞暈,通過畫圖能夠很思路理清,不容易弄錯。

畫圖時要聚焦子結構,忽略其他資訊。

兩個考點

連結串列的題目絕大多數圍繞是這兩種型別:

  • 指標的修改
  • 連結串列的拼接

兩個技巧

  • 虛擬頭:用一個虛擬頭指向頭節點,虛擬頭就是新的頭節點了,而虛擬頭不是題目給的節點,不參與運算,因此不需要特殊判斷
  • 快慢指標:搞兩個指標,一個大步走(一次走兩步),一個小步走(一次走一步)

三個注意

即使畫圖,思路也正確了,也要注意以下三點:

  • 出現了環,造成死迴圈
  • 分不清邊界,導致邊界條件出錯
  • 搞不懂遞迴怎麼做

解題技巧

快取

使用陣列 / map 來快取連結串列中結點的資訊。這種方法有點賴皮,考察連結串列的時候,實際上不希望使用這種方式來解決。

快慢指標

一快(一次2步)一慢(一次1步)從頭節點出發。對於判斷是否有環、找中間節點等問題很有效。

題目包括:

雙指標

一前一後從頭節點出發,或者一頭一尾往中間走。對於判斷倒數第N個節點、反轉連結串列等問題特別有效。

遞迴

連結串列問題都可以分割成幾個相同的子問題以縮小問題規模,再通過呼叫自身返回區域性問題的答案從而來解決大問題的。

題目包含:

參考資料

相關文章