単方向リストから要素を削除【基本情報技術者試験 科目B サンプル問題】

(令和4年度12月公開) 基本情報技術者試験 サンプル問題 科目B 問10のブログのアイキャッチ画像 科目B 公開問題
広告

← 科目Bの公開問題一覧へ戻る

 基本情報技術者試験の科目Bのサンプル問題を題材に,単方向リストから要素を削除する処理について学習します。この問題では,指定された位置の要素をリストから削除するために,参照をどのように変更するかを確認します。

広告

(令和4年度12月公開) 基本情報技術者試験 サンプル問題 科目B 問10

 次のプログラム中の       に入れる正しい答えを,解答群の中から選べ。

 手続 delNode は,単方向リストから,引数 pos で指定された位置の要素を削除する手続である。引数 pos は,リストの要素数以下の正の整数とする。リストの先頭の位置を1とする。

 クラス ListElement は,単方向リストの要素を表す。クラス ListElement のメンバ変数の説明を表に示す。ListElement 型の変数はクラス ListElement のインスタンスの参照を格納するものとする。大域変数 listHead には,リストの先頭要素の参照があらかじめ格納されている。

「(令和4年度12月) 基本情報技術者試験 サンプル問題 科目B 問10」の問題画像

〔プログラム〕

大域: 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

解答群

ア listHeadイ listHead.next
ウ listHead.next.nextエ prev
オ prev.nextカ prev.next.next

【解答】

【解説】

手続 delNode は,単方向リストの指定された位置の要素を削除する。削除する要素が先頭であれば listHead を次の要素へ更新し,先頭以外であれば削除する要素の1つ前の要素を探し,その next を削除する要素の次の要素へ変更して,削除する要素をリストから外す。

prev は削除する要素の1つ前の要素を表す。削除するには,prev の next を,削除する要素の次の要素へ変更する必要がある。削除する要素は prev.next であり,その次の要素は prev.next.next である。そのため,prev.next ← prev.next.next とすることで,削除する要素を飛ばして次の要素につなぎ直すことができる。

【参考】

「(令和4年度12月) 基本情報技術者試験 サンプル問題 科目B 問10」の解答画像

この問題のポイント

 この問題から学べることは,

  • 単方向リストから指定された位置の要素を削除する方法
  • 先頭の要素を削除するときの参照の変更
  • 削除する要素の1つ前の要素を参照をたどって探す方法
  • prev.next を変更して要素をリストから外す方法
  • トレース表を使って,変数や参照の変化を追跡する方法

です。特に,削除する要素の1つ前の要素を prev で求め,prev.next を削除する要素の次の要素に変更することで,リストから要素を外す処理を理解しておきましょう。

基本情報技術者試験の学習におすすめの参考書

基本情報技術者試験の合格を目指す方におすすめの参考書です。

令和08年 イメージ&クレバー方式でよくわかる かやのき先生の基本情報技術者教室
基礎理論からコンピュータ・ネットワーク・データベースまで、基本情報技術者試験の全範囲をわかりやすく学べる定番テキストです。図解が豊富で、初学者にもおすすめです。

キタミ式イラストIT塾 基本情報技術者 令和08年
イラストを使った解説が特徴の人気参考書です。基礎理論の考え方や計算問題もイメージで理解しやすく、独学学習との相性が良い一冊です。

令和08年 基本情報技術者 合格教本
試験範囲を体系的に学習したい方におすすめの教科書です。基礎理論の各テーマも丁寧に解説されており、理解を深めながら学習を進められます。

学習のお役に立ちましたら

この記事が少しでも学習のお役に立ちましたら,今後も分かりやすい解説や学習コンテンツを継続してお届けする励みになります。

よろしければ、このサイトを応援いただけますと嬉しいです。

※OFUSEは,クリエイターやコンテンツ制作を直接支援できるサービスです。

広告