応用情報技術者試験 令和5年度 秋期 午前 問5
双方向リストを三つの一次元配列 elem[i]、next[i]、prev[i]の組で実現する。双方向リストが図の状態のとき、要素 D の次に要素 C を挿入した後の next[6]、prev[6]の値の組合せはどれか。ここで、双方向リストは次のように表現する。
・双方向リストの要素は、elem[i]に値、next[i]に次の要素の要素番号、prev[i]に前の要素の要素番号を設定 ・双方向リストの先頭、末尾の要素番号は、それぞれ変数 Head、Tail に設定 ・next[i]、prev[i]の値が 0 である要素は、それぞれ双方向リストの末尾、先頭を表す。 ・双方向リストへの要素の追加は、一次元配列の末尾に追加

選択肢を押すと答え合わせができます。
正解と解説を見る
【正解】ウ
図のnextをHead=1からたどると、要素番号は1→4→3→5→2→0です。elemの値を対応させると、現在のリストはA→B→D→E→Fとなります。Dの要素番号は3であり、その直後のEの要素番号は5です。新しい要素は一次元配列の末尾へ追加するため、Cの要素番号は6になります。挿入後はA→B→D→C→E→Fとなるので、Cから見た次の要素はE、前の要素はDです。したがって、next[6]=5、prev[6]=3となり、ウが正解です。併せて、DからCへつなぐnext[3]=6と、EからCへ戻るprev[5]=6への更新も必要です。
アは誤りです。prev[6]=3はDを前の要素とするので正しいですが、next[6]=2ではCの次がFとなり、本来間にあるEを飛ばしてしまいます。
イは誤りです。next[6]=3、prev[6]=4は、Cを要素番号4のBと要素番号3のDの間に置く設定です。これはDの次ではなく、Dの前への挿入になります。
エは誤りです。next[6]=5によってCの次をEとする点は正しいですが、prev[6]=4ではCの前がBになります。Dの要素番号は3なので、双方向の連結関係が一致しません。
【ポイント】 双方向リストへの挿入では、新要素のnextとprevだけでなく、前後の既存要素のリンクも更新します。 挿入位置の前をp、後ろをq、新要素をnとすると、next[p]=n、prev[n]=p、next[n]=q、prev[q]=nです。 配列上の要素番号の順序と、リスト上の並び順は同じとは限りません。
出典:令和5年度 秋期 応用情報技術者試験 午前 問5
※ 解説は SkillStack 編集部が作成したものです。Web 表示のため、図表の配置や表記を一部改めています。
この回の80問を、アプリで通しで解く
- 本番と同じ問題数・制限時間で通し演習(模試モード)
- 間違えた問題は自動で「復習すべき問題」に回る
- 解説で分からない点はAIに質問できる