次のプログラム中の に入れる正しい答えを、解答群の中から選べ。 手続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を次の次へ張り替える

頻出基本情報技術者試験2022年度 公開問題 科目B10/アルゴリズムとプログラミング / データ構造

メンバ変数説明
val文字型要素の値
nextListElement次の要素の参照
次の要素がないときの状態は未定義 〔プログラム〕 大域: 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

選択肢

正解と解説

正解: prev.next.next

単方向リストで途中の要素を削除するには、削除対象の1つ前の要素のnextを、削除対象の次の要素へ張り替えます。ループを抜けた時点でprevは削除対象の直前(pos-1番目)を指しているので、削除対象はprev.next、その次はprev.next.nextです。したがって prev.next ← prev.next.next とすれば、対象の要素が連結から外れます。

選択肢ごとの解説

出典:令和4年度 公開問題 基本情報技術者試験 科目B 問10(IPA)

同じ分野の他の問題

最終更新:2026-08-25/解説・選択肢ごとの解説は資格暗記が独自に作成しています。問題文と選択肢の出典は上記のとおりです。