問2 双方向リストへの要素の追加

基本情報​技術者試験 令和5年度 公開問題 科目A、全20問のうちの問2。

出典:令和5年度 基本情報技術者試験 公開問題 科目A 問2(表は原本の画像を文字に書き起こした)

双方向のポインタをもつリスト構造のデータを表に示す。この表において新たな社員 G を社員 A と社員 K の間に追加する。追加後の表のポインタ a ~ f の中で追加前と比べて値が変わるポインタだけを全て列記したものはどれか。

表
アドレス社員名次ポインタ前ポインタ
1⁠0⁠0社員 A3⁠0⁠00
2⁠0⁠0社員 T03⁠0⁠0
3⁠0⁠0社員 K2⁠0⁠01⁠0⁠0

表は横に送ると続きが見えます。

追加後の表
アドレス社員名次ポインタ前ポインタ
1⁠0⁠0社員 Aab
2⁠0⁠0社員 Tcd
3⁠0⁠0社員 Kef
4⁠0⁠0社員 Gxy

表は横に送ると続きが見えます。

  1. アa,b,e,f
  2. イa,e,f
  3. ウa,f
  4. エb,e
答えと解説を開く

正解はウです。

追加前の並びを次ポインタでたどります。先頭は前ポインタが 0 の社員 A (1⁠0⁠0) です。A の次ポインタは 3⁠0⁠0 で社員 K、K の次ポインタは 2⁠0⁠0 で社員 T、T の次ポインタは 0 なので T が末尾です。並びは A→K→T です。ここに社員 G (4⁠0⁠0) を A と K の間に入れると、並びは A→G→K→T になります。各ポインタの追加後の値は次のとおりです。a (A の次) は 3⁠0⁠0 から 4⁠0⁠0 に変わります。b (A の前) は先頭のまま 0 で変わりません。c (T の次) は末尾のまま 0、d (T の前) は K のまま 3⁠0⁠0 で、どちらも変わりません。e (K の次) は T のまま 2⁠0⁠0 で変わりません。f (K の前) は 1⁠0⁠0 から 4⁠0⁠0 に変わります。新しい G は x=3⁠0⁠0 (次は K)、y=1⁠0⁠0 (前は A) になります。変わるのは a と f だけです。正解はウです。

ほかの選択肢が違う理由

  • アb と e は変わりません。A は先頭のままなので前ポインタ b は 0 のまま、K の次は T のままなので次ポインタ e は 2⁠0⁠0 のままです。
  • イe は変わりません。G は K の前に入るので、K の後ろの T とのつながり (e=2⁠0⁠0) はそのままです。
  • エ変わるのは A の次ポインタ a と K の前ポインタ f です。b と e はどちらも追加前の値のままです。

仕組み

双方向リストは、各要素が「次の要素の場所」と「前の要素の場所」の両方をもつ並びです。間に 1 つ入れるときは、前の要素の次ポインタと、後ろの要素の前ポインタの 2 つを書き換え、新しい要素の 2 つのポインタを設定します。

配列と違い、要素を後ろへずらす必要がありません。ポインタの書き換えだけで済むので、途中への追加や削除が速いのがリストの強みです。

この問に出る言葉