アルゴリズムとプログラミング

基本情報技術者試験連結リスト」の問題

アルゴリズムとプログラミングアルゴリズムとプログラミング計算問題難易度:normal
単方向連結リストの各ノードはメンバ val(整数)と next(次ノードへの参照。なければ NULL)をもつ。先頭ノード head から順に val を合計する次の手続に、head→[112]→[88]→[115]→NULL のリストを与えて実行したとき、戻り値はどれか。
○整数型: total(ノード: head)
  整数型: sum ← 0
  ノード: cur ← head
  while (cur が NULL でない)
    sum ← sum + cur.val
    cur ← cur.next
  endwhile
  return sum
35
3150
315
203
正解
315

cur が NULL になるまで各ノードの val を sum に加える。112, 88, 115 をすべて加えて 112+88+115=315 となるため ウが正しい。

?選択肢ごとの解説

ア ×合計 315 の桁を取り違え、各 val の十の位だけを拾うなどして 35 とした桁の誤りである。
イ ×加算ではなく桁を連結・スケールしてしまい 3150 とした、加算結果を 10 倍に膨らませた誤りである。
ウ ○cur が NULL になるまで各ノードの val を sum に加える。112, 88, 115 をすべて加えて 112+88+115=315 となるため ウが正しい。
エ ×先頭ノード 112 を処理せず 88+115=203 を求め、初期 cur の位置を 1 つ進めすぎた off-by-one 的誤りである。

くわしく

連結リスト走査では『現ノードを処理してから next へ進む』順序が要である。加算と前進の順を入れ替えると先頭または末尾を取りこぼす。

本番での押さえどころ

試験のコツ

while 条件は『cur が NULL でない』を毎回確認し、処理→前進の 2 行をセットで追う。

覚え方

『見てから動く』=処理してから next、と覚える。

よくある誤り

cur←cur.next を加算より前に書き、先頭要素を飛ばすミスが多い。

アルゴリズムとプログラミングの他の問題

この問題を、AIの8-ways解説つきで。

基本情報技術者試験の演習を、一問ごとに「なぜ」まで。まずは無料で。

無料ではじめる →

ukamiru 過去問 · 基本情報技術者試験 · fe-b-algo-0005

【基本情報技術者試験】連結リストの問題 — 解答・解説|ukamiru 過去問