まず結論

連結リストノード(データ+次のノードへのポインタ)を鎖のようにつないだデータ構造です。配列と異なり挿入・削除がO(1)でできますが、特定要素へのランダムアクセスはO(n)になります。

連結リストのしくみ

ノードは「データ」と「次のノードへのポインタ(参照)」を持ちます。

先頭
A
次→
B
次→
C
次→
D
NULL
各ノード: [データ | 次のノードへのポインタ] / 最後のノードのポインタはNULL

挿入・削除がO(1)な理由

AとBの間に「X」を挿入するには?
① 新しいノードXを作る
② XのポインタをBに向ける
③ AのポインタをXに変える
→ ポインタを2か所変えるだけ!要素をずらす必要がない → O(1)
挿入後:A → X → B → C → D
A
X→
X
B→
B
C→
… →
D
NULL
配列との比較:アクセス

配列: O(1)(インデックスで直接)
連結リスト: O(n)(先頭から順にたどる必要)

配列との比較:挿入・削除

配列: O(n)(要素をずらす必要)
連結リスト: O(1)(ポインタ付け替えのみ)

単方向リストと双方向リスト

単方向リスト

ポインタが次のノードのみを指す。シンプルだが前には戻れない。

A → B → C → NULL

双方向リスト

前後両方のノードへのポインタを持つ。前後を自由に移動できる。

NULL ⇔ A ⇔ B ⇔ C ⇔ NULL

🎯 試験での出方

⚠️ よくある間違い

✍️ 確認クイズ

Q1. 連結リストにおいて、先頭への要素挿入の計算量はどれか。
✅ 正解は①。連結リストへの挿入はポインタを付け替えるだけなのでO(1)。ただし特定位置まで移動する時間は別途O(n)かかる場合があります。
Q2. 連結リストと配列を比較したとき、連結リストの方が優れているのはどれか。
✅ 正解は②。連結リストの挿入・削除はO(1)(ポインタ付け替え)で配列のO(n)より優れています。ランダムアクセスは配列のO(1)に対し連結リストはO(n)です。
Q3. 連結リストの各ノードが持つ情報として適切なものはどれか。
✅ 正解は③。連結リストの各ノードは「データ(値)」と「次のノードへのポインタ(参照・住所)」を持ちます。これでノードがチェーン状につながります。
Q4. 単方向リストと双方向リストの違いとして正しいものはどれか。
✅ 正解は②。単方向リストは各ノードが「次→」のポインタのみを持ち前には戻れません。双方向リストは「←前」「次→」の両方のポインタを持つため前後自由に移動できます。双方向リストはメモリを多く使いますが、柔軟な操作が可能です。
Q5. 連結リストのn番目の要素にアクセスする計算量はどれか。
✅ 正解は②。連結リストはメモリ上に連続していないため、n番目の要素にアクセスするには先頭ノードから「次→」を辿って1つずつ進む必要があります。これがO(n)。対して配列はa[n]で直接アクセスできるためO(1)。連結リストの弱点がランダムアクセスの遅さ(O(n))です。

Sponsor Link