【そうほうこうれんけつりすと】

双方向連結リスト とは?

💡 前にも後ろにも進める、双方向の連結チェーン
📌 このページのポイント
双方向連結リスト vs 単方向連結リスト 単方向 A B C D →一方通行 双方向 A B C D ↔双方向 各ノードの構造 prev data next ← 3つのフィールド
双方向連結リストのイメージ
ひよこ ひよこ

双方向連結リストって普通の連結リストと何が違うの?

ペンギン先生 ペンギン先生

普通の連結リストは「次のノード」への矢印だけだから一方通行なんだ。双方向連結リストは「前のノード」への矢印も持ってるから、前にも後ろにも移動できるんだよ。

ひよこ ひよこ

前にも後ろにも行けると何がうれしいの?

ペンギン先生 ペンギン先生

例えばあるノードを削除したいとき、単方向リストだと前のノードを探すのに先頭からたどり直す必要がある。でも双方向なら前のノードにすぐアクセスできるから、削除がO(1)でできるんだ。

ひよこ ひよこ

デメリットはあるのかな?

ペンギン先生 ペンギン先生

ポインタが2つになるからメモリ消費が増えるし、挿入・削除のときに前後両方のポインタを正しく付け替える必要があるから、実装がちょっと面倒になるんだ。

ひよこ ひよこ

実際にはどこで使われてるの?

ペンギン先生 ペンギン先生

ブラウザの「戻る・進む」ボタンの履歴管理、テキストエディタのカーソル移動、OSのタスクスケジューラ、LRUキャッシュの実装なんかで活躍しているよ。Linuxカーネルの内部でも双方向連結リストは大活躍しているんだ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「双方向連結リスト」って出てきたら「前にも後ろにも進めるリスト」と思えればだいたいOK!
📖 おまけ:英語の意味
「Doubly Linked List」 = 双方向連結リスト
💬 Doubly(二重に)Linked(つながった)Listだから、双方向に繋がったリストという意味だよ
← 用語集にもどる