双方向のポインタをもつリスト構造のデータを表に示す。
この表において新たな社員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
正答3
解説
正解は3です。
双方向リスト(前後両方へのポインタをもつリスト)にデータを挿入したとき、どのポインタが変わるかを問う問題です。
まず追加前のつながりを読み取ります。
【計算】
追加前は、社員A(100)の次が300、社員K(300)の次が200、社員T(200)の次が0です。
したがって、並び順は社員A、社員K、社員Tです。
社員G(400)を社員Aと社員Kの間に入れると、並び順は社員A、社員G、社員K、社員Tになります。
aは社員Aの次ポインタで、300から400(社員G)に変わります。
bは社員Aの前ポインタで、先頭のため0のままです。
cとdは社員Tのポインタで、隣が社員Kのままなので0と300のままです。
eは社員Kの次ポインタで、200(社員T)のままです。
fは社員Kの前ポインタで、100(社員A)から400(社員G)に変わります。
なお、社員Gのxは300、yは100が新たに設定されますが、a〜fには含まれません。
【選択肢別解説】
1:× bとeは変わりません。
社員Aの前と社員Kの次は、挿入位置と関係がないからです。
2:× eは変わりません。
社員Kの次は社員Tのままなので、200のままです。
3:○ 変わるのは、社員Aの次ポインタaと、社員Kの前ポインタfだけです。
どちらも新しい社員Gのアドレス400を指すようになります。
4:× bとeは変わらず、実際に変わるaとfが含まれていません。
【ポイント】
双方向リストに1件挿入すると、前の要素の次ポインタと、後ろの要素の前ポインタの2つが書き換わります。
新しい要素自身の2つのポインタも設定が必要です。