次のプログラム中の に入れる正しい答えを、解答群の中から選べ。 手続delNodeは、単方向リストから、引数posで指定された位置の要素を削除する手続である。引数posは、リストの要素数以下の正の整数とする。リストの先頭の位置を1とする。 クラスListElementは、単方向リストの要素を表す。クラスListElementのメンバ変数の説明を表に示す。ListElement型の変数はクラスListElementのインスタンスの参照を格納するものとする。大域変数listHeadには、リストの先頭要素の参照があらかじめ格納されている。 〔表 クラスListElementのメンバ変数の説明〕 メンバ変数val 型文字型:要素の値。 メンバ変数next 型ListElement:次の要素の参照。次の要素がないときの状態は未定義。 〔プログラム〕 大域: ListElement: listHead // リストの先頭要素が格納されている ○delNode(整数型: pos) /* posは、リストの要素数以下の正の整数 */ ListElement: prev 整数型: i if (pos が 1 と等しい) listHead ← listHead.next else prev ← listHead /* posが2と等しいときは繰返し処理を実行しない */ for (i を 2 から pos - 1 まで 1 ずつ増やす) prev ← prev.next endfor prev.next ← endif
単方向リストの削除は前要素のnextを次の次へ張り替える
| メンバ変数 | 型 | 説明 |
|---|---|---|
| val | 文字型 | 要素の値 |
| next | ListElement | 次の要素の参照 |
選択肢
- アlistHead
- イlistHead.next
- ウlistHead.next.next
- エprev
- オprev.next
- カprev.next.next
正解と解説
正解:カ prev.next.next
単方向リストで途中の要素を削除するには、削除対象の1つ前の要素のnextを、削除対象の次の要素へ張り替えます。ループを抜けた時点でprevは削除対象の直前(pos-1番目)を指しているので、削除対象はprev.next、その次はprev.next.nextです。したがって prev.next ← prev.next.next とすれば、対象の要素が連結から外れます。
選択肢ごとの解説
- ア先頭要素を指すため、リストが循環したり構造が壊れたりする。
- イ先頭の次を指すだけで、削除位置と無関係。
- ウ先頭から2つ先を指すもので、posに応じた位置になっていない。
- エ自分自身を指すことになり、循環参照が生じる。
- オ削除対象そのものを指すため、何も削除されない。
- カ正解。削除対象を飛ばして、その次の要素へ連結を張り替える。
同じ分野の他の問題
- 次のプログラム中の a と b に入れる正しい答えの組合せを、解答群の中から選べ。ここで、配列の要素番号は1から始まる。…2026年度 公開問題 科目B 問4
- 次のプログラム中の a と b に入れる正しい答えの組合せを、解答群の中から選べ。ここで、配列の要素番号は1から始まる。…2025年度 公開問題 科目B 問3
- 図の木構造は2分探索木である。a〜gの値の大小関係として,適切なものはどれか。ここで,a〜gの値は重複しないものとする。2025年度 公開問題 科目A 問3
- 次のプログラム中の に入れる正しい答えを、解答群の中から選べ。ここで、配列の要素番号は1から始まる。 図1に示すグラフの…2024年度 公開問題 科目B 問3
- 双方向のポインタをもつリスト構造のデータを表に示す。この表において新たな社員Gを社員Aと社員Kの間に追加する。追加後の表…2023年度 公開問題 科目A 問2
最終更新:2026-08-25/解説・選択肢ごとの解説は資格暗記が独自に作成しています。問題文と選択肢の出典は上記のとおりです。