アルゴリズムとプログラミング
双方向のポインタをもつリスト構造のデータを表に示す。この表において新たな社員Gを社員Aと社員Kの間に追加する。追加後の表のポインタa~fの中で追加前と比べて値が変わるポインタだけを全て列記したものはどれか。
| アドレス | 社員名 | 次ポインタ | 前ポインタ |
|---|---|---|---|
| 100 | 社員A | 300 | 0 |
| 200 | 社員T | 0 | 300 |
| 300 | 社員K | 200 | 100 |
| アドレス | 社員名 | 次ポインタ | 前ポインタ |
|---|---|---|---|
| 100 | 社員A | a | b |
| 200 | 社員T | c | d |
| 300 | 社員K | e | f |
| 400 | 社員G | x | y |
ア.a、b、e、f
イ.a、e、f
ウ.a、f正解
エ.b、e
解説
双方向リストへの挿入は「行列に割り込む人の手つなぎ直し」。変わるのは割り込まれた隣人2人が新人Gへ向ける手(ポインタ)だけで、それ以外の手はそのまま。
なぜ ウ が正解か
GはAとKの間に入るので、AはNextを「K(300)」から「G(400)」に書き換える→これがa。KはPrevを「A(100)」から「G(400)」に書き換える→これがf。AのPrev(b)は元から0で変わらず、KのNext(e)は依然Tを指したまま、TのポインタはそもそもGの挿入点より遠くて無関係。だから変わるのはaとfの2本だけ。
出典: 基本情報技術者試験 令和5年 公開問題