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

双方向連結リスト とは?

最終更新:
💡 前にも後ろにも進める、双方向の連結チェーン

各ノードが前後両方のノードへのポインタを持つ連結リスト。前方にも後方にもたどれるため、挿入・削除が柔軟に行えるデータ構造。

📌 このページのポイント
前にも後ろにもたどれるリスト 単方向:次へのリンク A B C D 双方向:次と前へのリンク A B C D 青=next / 橙=prev prev data next 各ノードの構造(両端のリンクは省略) リンクの付け替え O(1) / 位置の探索 O(n)
単方向と双方向を同じ4ノードで比較。対象ノードや挿入位置が既知ならリンク操作はO(1)。目的の位置を探す走査は別で、O(n)になり得る。
ひよこ ひよこ
双方向連結リストって、単方向のリストと何が違うの?
ペンギン先生 ペンギン先生
単方向連結リストは、次のノードへのリンクを持つよ。双方向連結リストは前のノードへのリンクも持つので、前にも後ろにもたどれるんだ。
ひよこ ひよこ
削除するときも便利なの?
ペンギン先生 ペンギン先生
対象ノードがすでにわかっていれば、その前後のノードのリンクを付け替える処理はO(1)でできるよ。ただし、先に目的の位置を探すなら、走査にO(n)かかる場合がある。単方向でも前のノードがわかっていれば、先頭から探し直す必要はないんだ。
ひよこ ひよこ
デメリットはあるのかな?
ペンギン先生 ペンギン先生
前後2つのリンクを保持する分のメモリが必要で、挿入・削除では両方を正しく更新する必要があるよ。リンクの操作が速いことと、目的のデータを探すのが速いことは別なんだ。
ひよこ ひよこ
実際にはどこで使われてるの?
ペンギン先生 ペンギン先生
Linuxカーネルには、双方向のリンクを持つ循環リストの仕組みがあるよ。最後から先頭にもつながる形式なんだ。一般的な双方向連結リストは必ず循環するわけではなく、図のように両端を持つ形もあるんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「双方向連結リスト」って出てきたら「前にも後ろにも進めるリスト」と思えばだいたいOK!
📖 おまけ:英語の意味
「Doubly Linked List」 = 双方向連結リスト
💬 Doubly(二重に)Linked(つながった)Listだから、双方向に繋がったリストという意味だよ

参考資料

← 用語集にもどる