【れんけつりすと】

連結リスト とは?

💡 鎖のように「次はあっちだよ」と繋がっているデータの列
📌 このページのポイント
連結リスト(Linked List) HEAD 値: A data next ポインタ 値: B data next ポインタ 値: C data next ポインタ 値: D data null 終端 途中への挿入が簡単 値: X next 新ノード 配列: 挿入/削除 O(n) 探索 O(1) | 連結リスト: 挿入/削除 O(1) 探索 O(n)
各ノードが次のノードへのポインタを持つデータ構造
ひよこ ひよこ

連結リストって配列と何が違うの?

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

配列はデータがメモリ上に連続して並んでいる。連結リストは各データが「次のデータがある場所」を記録していて、メモリ上でバラバラに置かれていても繋がっているんだ。電車の各車両が「次の車両はこっち」という連結器で繋がっているイメージだよ。

ひよこ ひよこ

どんな時に連結リストが便利なの?

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

途中への挿入や削除が多い場面だよ。配列の途中に要素を追加すると、後ろの要素を全部ずらさないといけない。でも連結リストは「前のノードのポインタ先を変える」だけで挿入できる。ただし「3番目の要素を取得して」という場面は先頭から順番に辿らないといけないから遅い。

ひよこ ひよこ

実際のプログラミングで使う場面は?

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

多くの言語のキュースタックの内部実装に使われているよ。Pythonのdeque(両端キュー)も連結リスト的な仕組みだし、Javaのリンクドリストクラスもある。直接自分で連結リストを書く機会は少ないけど、データ構造の考え方の基礎として理解しておくと応用が利くよ。

ひよこ ひよこ
ペンギン先生 ペンギン先生

通常の連結リスト(単方向)は各ノードが「次」へのポインタだけ持つけど、双方向は「前」へのポインタも持つ。後ろから前にも辿れるから、末尾からの削除がO(1)でできる。Javaの LinkedList やPythonの collections.deque は内部で双方向連結リストを使っているよ。

ひよこ ひよこ

連結リストの面接問題って有名だけど、なんでそんなに出題されるの?

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

ポインタ操作の理解を試すのに最適だからだよ。「連結リストの逆転」「サイクル検出(フロイドのウサギとカメ)」「2つの連結リストの合流点」は定番問題。これらが解ければポインタ・再帰・二重ポインタの基本が身についている証拠。実務で連結リストを自作する機会は少ないけど、データ構造の理解度を測る良い指標として面接で重宝されるんだ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「連結リスト」って出てきたら「次の要素の場所を記録しながら鎖状につながるデータ構造」と思えばだいたいOK!
📖 おまけ:英語の意味
「Linked List」 = 連結されたリスト
💬 1955年ごろにALLAC言語の開発で考案された。「Link(繋ぐ)+ List(一覧)」で、要素同士が互いに繋がって並んでいるイメージだよ
← 用語集にもどる