戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

基本情報技術者 2018年 春期 午前(科目A)06


問題文

リストを二つの1次元配列で実現する。配列要素box[i]とnext[i]の対がリストの一つの要素に対応し、box[i]に要素の値が入り、next[i]に次の要素の番号が入る。配列が図の状態の場合、リストの3番目と4番目との間に値がHである要素を挿入したときのnext[8]の値はどれか。ここで、next[0]がリストの先頭(1番目)の要素を指し、next[i]の値が0である要素はリストの最後を示し、next[i]の値が空白である要素はリストに連結されていない。
基本情報技術者 2018年 春期 午前(科目A) 問06の問題画像

選択肢

3
5
7(正解)
8

🔒 解説は解答すると表示されます

配列による単方向リスト挿入【午前解説】

正解の理由

配列表現の連結リストでは next[0] が先頭を示し,next[i]=0 が末尾を示します。図より先頭は next[0]=1 で,辿ると 1 → 5 → 3 → 7 → 2 → 0 の順になります。
3 番目の要素はインデックス 3(値 C),4 番目はインデックス 7(値 G)です。値 H は index 8 に格納するので,挿入のために次の操作を行います:next[8] に元々 3 の次であった 7 を代入し,その後 next[3] を 8 に変更します。したがって next[8] の値は 7 であり,選択肢では が正解です。

解法ステップ

  1. next[0] から始めて next を辿り,現在の連結順を求める(1 → 5 → 3 → 7 → 2 → 0)。
  2. 3 番目と 4 番目の要素を確認する(3 番目はインデックス 3、4 番目はインデックス 7)。
  3. 挿入するノードのインデックス(ここでは 8)を決める(box[8]=H)。
  4. next[8] に元の prev(3)の次を代入する(next[8] = next[3] = 7)。
  5. prev の next を new に更新する(next[3] = 8)。これで 3 → 8 → 7 の連結が完成する。

選択肢別の誤答解説

  • ア: 3
    誤り。これは next[8] を prev(挿入位置の直前ノード)にしてしまう誤解。正しくは prev の次を指す値を new に代入するので 3 ではなく 7 です。
  • イ: 5
    誤り。5 はリスト中の別ノード(2 番目)への参照で,3 と 7 の間の挿入とは無関係です。next[5] は既に 3 を指しています。
  • ウ: 7
    正解。挿入後 new(8)の次は元々 prev(3)が指していたノード 7 になるため next[8]=7 となります。
  • エ: 8
    誤り。self reference(自分自身を指す)はループを作り意図しない構造になります。挿入時は new が元の次を指すべきで自己参照ではありません。

よくある誤解

  • 「next[i]=0 を未使用の意味と誤解」:ここでは next[i]=0 がリストの末尾(NULL)を意味し,未使用セルは空白で示されています。
  • 「挿入時の代入順を逆にする」:先に prev の next を new にしてしまうと元の次要素を失い next[new] に正しい値を入れられません。
  • 「要素番号と要素の順序を混同する」:k 番目の要素の中身(箱の値)と配列インデックス(ノード番号)を取り違えるミスが多いです。

補足コラム

配列で連結リストを実装する方式は,ポインタの代わりに配列インデックスを使う古典的手法です。挿入操作の安全な手順は常に次の通りです:
  1. next[new] = next[prev]
  2. next[prev] = new
    この順序を守ることでリンクを失う事故を防げます。空きセル管理(フリーリスト)を用いれば,削除したセルを再利用できます。
参考として Python 風の擬似コード(インデックス基準は図と同様):
# next: リストの next 配列(0-9)
# new = 8, prev = 3
next[new] = next[prev]   # next[8] = 7
next[prev] = new         # next[3] = 8

FAQ

Q1: next[0] が先頭ポインタなのはなぜですか?
A1: 図や設問でそう定義されているためです。配列実装では特殊セル(ここでは index 0)を先頭ポインタに使う慣習がよくあります。
Q2: next[i]=0 と空白はどう違いますか?
A2: next[i]=0 は「リストの末尾(NULL)」を示し,空白は「その配列要素がリストに連結されていない(未使用)」ことを示します。
Q3: 空のリストに挿入するときはどうする?
A3: 先頭が空の場合(next[0] = 0 等),新ノードの next を 0 にして next[0] を新ノードのインデックスに設定します。

関連キーワード: リスト、配列実装、連結リスト、挿入操作、ポインタ管理
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

基本情報技術者
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について