戦国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 情報処理技術者試験対策アプリ

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