単方向リストとは?たんほうこうりすと
単方向リストとは、各要素が値と、次の要素の位置を指すポインタだけを持つ連結リスト。先頭から末尾へ一方向にしかたどれず、末尾の要素は次が無いことを示す値を持つ。要素の挿入や削除は、前後の要素のポインタを書き換えるだけで済み(削除は直前の要素のポインタ1本、挿入は新しい要素と直前の要素のポインタの2本)、後ろの要素を動かす必要が無い。一方、目的の要素を探すには先頭から順に見ていく必要がある。
最終更新:2026-10-09
この語が出る過去問を解く →背景
配列は要素を連続した領域に並べるため、途中に一つ入れるだけで後ろ全部をずらすことになる。データの出入りが多い処理では、この移動が重くのしかかる。各要素に次の場所を書いておけば、領域が飛び飛びでも並び順を表現でき、挿入や削除はつなぎ替えだけで終わる。単方向リストは、この考え方を前へ戻る手段を持たない最小限の形で実現したものである。
具体例
Javaの標準ライブラリのLinkedListは前後両方のポインタを持つ。一方、組込み機器の実装のように記憶領域を節約したい場面では、前へ戻るポインタを持たない単方向リストが今も使われている。
試験での引っ掛け
双方向リストと取り違えない。前の要素へのポインタが無いため、ある要素を削除するには直前の要素を先頭から探し直す必要がある。また末尾の次を先頭につないだものは環状リストであり、単方向リストの末尾は次が無いことを示す値になる点も問われる。
関連用語
出た過去問
出典:令和4年度 公開問題 基本情報技術者試験 科目B 問10(IPA)
次のプログラム中の に入れる正しい答えを、解答群の中から選べ。 手続delNodeは、単方向リストから、引数posで指定された位置の要素を削除する手続である。引…
正解:prev.next.next
要点:単方向リストの削除は前要素のnextを次の次へ張り替える
単方向リストで途中の要素を削除するには、削除対象の1つ前の要素のnextを、削除対象の次の要素へ張り替えます。ループを抜けた時点でprevは削除対象の直前(pos-1番目)を指しているので、削除対象はprev.next、その次はprev.next.nextです。したがって prev.next ← prev.next.next とすれば、対象の要素が連結から外れます。
出典:令和8年度 公開問題 基本情報技術者試験 科目B 問4(IPA)
次のプログラム中の a と b に入れる正しい答えの組合せを、解答群の中から選べ。ここで、配列の要素番号は1から始まる。 単方向リストを、配列dataListと…
正解:a: pointerList[p]、b: pointerList[p]
要点:リストは次ポインタの未定義で終端を判定して進む
単方向リストをたどる処理では、現在位置 p の値を取り出した後、次の要素番号を pointerList[p] から得ます。末尾に達したかどうかは「次を指すポインタが未定義かどうか」で判定するので、空欄 a は pointerList[p] です。判定を通過したら空欄 b で p ← pointerList[p] として次へ進みます。dataList[p] を判定に使うと、値が未定義でなくてもリンクが切れている場合を捉えられず、i を代入すると連結順ではなく要素番号順にたどってしまいます。
出典・参考
公式シラバスの1 基礎理論 > 1. データ構造 > (2) データ構造の種類に掲載されている用語です。
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。