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

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

アルゴリズムとプログラミングアルゴリズムとプログラミング計算問題難易度:normal
単方向連結リストの各ノードは val(整数)と next(参照、なければ NULL)をもつ。次の擬似言語は、値 target をもつ最初のノードを 1 つだけ削除する手続である。head→[600]→[755]→[755]→[900]→NULL に対し target=755 を与えて実行したあと、head から末尾までの val の並びはどれか。
○手続: deleteFirst(ノード: head, 整数型: target)
  ノード: cur ← head
  ノード: prev ← NULL
  while (cur が NULL でない)
    if (cur.val が target と等しい)
      prev.next ← cur.next
      return
    endif
    prev ← cur
    cur ← cur.next
  endwhile
{600, 755, 900}
{600, 900}
{755, 900}
{600, 755, 755, 900}
正解
{600, 755, 900}

手続は最初に target と一致したノードを prev.next の付け替えで 1 つだけ外し、return で終了する。2 番目の 755 が外れて並びは {600, 755, 900} となるため イが正しい。

?選択肢ごとの解説

イ ○手続は最初に target と一致したノードを prev.next の付け替えで 1 つだけ外し、return で終了する。2 番目の 755 が外れて並びは {600, 755, 900} となるため イが正しい。
ア ×値が 755 のノードをすべて削除したと誤認し {600, 900} とした、return による 1 個限定の打ち切りを見落とした誤りである。
ウ ×先頭 600 と 755 の両方を削除したと取り違えて {755, 900} とした、削除対象を広げすぎた誤りである。
エ ×どのノードも削除されず元の並び {600, 755, 755, 900} のままとした、target 一致時の付け替えを行わなかった誤りである。

くわしく

単方向リストの削除は『削除ノードの直前 prev の next を削除ノードの next に付け替える』ことで実現する。return があるため一致が複数あっても最初の 1 個だけが対象となる。

本番での押さえどころ

試験のコツ

prev と cur のペアを 1 ノードずつずらし、最初に一致した瞬間の付け替え結果だけを書く。

覚え方

『前のノードの矢印を飛び越し先につなぐ』と覚え、return で 1 個限定と確認する。

よくある誤り

return を見落として全削除と考えたり、削除する 755 がどちらの位置かを取り違えるミスが多い。

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

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

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

無料ではじめる →

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

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