この概念が出た関連問題

この試験の対策ガイド

情報処理安全確保支援士試験 対策ガイド

合格率・勉強法・参考書の選び方をまとめています

見る →
答えと解説を見る(先に解くのがおすすめ)

正解は エ

解説

先頭ポインタと末尾ポインタをもつ単方向(片方向)線形リストにおいて、ポインタをたどる回数が最も多い処理を選ぶ問題です。単方向リストは各要素が「次の要素」へのポインタだけをもち、前の要素へはたどれません。各処理を検討します。先頭への追加・先頭の削除は、先頭ポインタを操作するだけで完了するため、ほとんどポインタをたどる必要がありません。末尾への追加は、末尾ポインタが直接最後の要素を指しているため、そこに新要素をつなぐだけで済みます。しかし末尾の削除では、削除後に末尾ポインタを「最後から2番目の要素」へ付け替える必要があります。単方向リストでは後ろから前へたどれないため、先頭から順にポインタをたどって最後から2番目の要素を探さなければならず、要素数に比例した回数(O(n))のたどりが発生します。したがって選択肢dの「末尾のデータを削除する処理」が最もたどる回数が多く、正解です。双方向リストにすればこの問題は解消できる点も併せて理解しておきましょう。

なぜ他の選択肢は違うのか

選択肢 ア
「先頭にデータを追加する処理」は、新しい要素のポインタを現在の先頭要素に向け、先頭ポインタを新要素に付け替えるだけで完了します。ポインタをたどる必要がほとんどなく、定数時間(O(1))で済むため、たどる回数が最も多い処理にはなりません。新要素のポインタを現在の先頭に向け、先頭ポインタを新要素へ付け替えるだけで完了するため、リストをたどる回数が最も多い処理にはなりません。常に定数時間O(1)で済みます。
選択肢 イ
「先頭のデータを削除する処理」は、先頭ポインタを現在の先頭要素の次の要素に付け替えるだけで完了します。リストを順にたどる必要がなく、定数時間(O(1))で処理できるため、たどる回数が最も多い処理には該当しません。先頭ポインタを次の要素へ付け替えるだけでよく、リストを順にたどる必要がありません。常に定数時間O(1)で済むため、たどる回数が最も多い処理には当たりません。
選択肢 ウ
「末尾にデータを追加する処理」は、末尾ポインタが最後の要素を直接指しているため、その要素のポインタを新要素に向け、末尾ポインタを新要素へ付け替えるだけで済みます。先頭からたどる必要がなく定数時間(O(1))で完了するため、最もたどる回数が多い処理ではありません。末尾ポインタが最後の要素を直接指しているため、その要素に新要素をつなぎ末尾ポインタを更新するだけで完了し、先頭からたどる必要がなくO(1)で済みます。

解くときのポイント

単方向リストは後ろへたどれないのが弱点。末尾削除は『最後から2番目』を先頭から探すためO(n)で最も重い。末尾ポインタがあっても末尾削除だけは救えない。双方向リストなら末尾削除もO(1)。