リストを二つの1次元配列で実現する。
配列要素box[i]とnext[i]の対がリストの一つの要素に対応し,box[i]に要素の値が入り,next[i]に次の要素の番号が入る。
配列が図の状態の場合,リストの3番目と4番目との間に値がHである要素を挿入したときのnext[8]の値はどれか。
ここで,next[0]がリストの先頭(1番目)の要素を指し,next[i]の値が0である要素はリストの最後を示し,next[i]の値が空白である要素はリストに連結されていない。
図:index 0/1/2/3/4/5/6/7/8/9
box (空欄)/A/B/C/D/E/F/G/H/I
next 1/5/0/7/(空欄)/3/(空欄)/2/(空欄)/(空欄)
正答3
解説
正解は3です。
配列boxとnextで実現した連結リストに、要素を挿入する問題です。
図では、box[1]〜box[9]にAからIが入っています。
nextには、番号0から順に1、5、0、7、空白、3、空白、2、空白、空白が入っています。
まずnext[0]から順にたどって、現在のリストの並びを確かめます。
【リストのたどり方】
next[0]=1なので、1番目はbox[1]のAです。
next[1]=5なので、2番目はbox[5]のEです。
next[5]=3なので、3番目はbox[3]のCです。
next[3]=7なので、4番目はbox[7]のGです。
next[7]=2なので、5番目はbox[2]のBで、next[2]=0によりBが最後です。
3番目のCと4番目のGの間に、box[8]のHを挿入します。
Cの次をHにするため、next[3]を8に書き換えます。
Hの次をGにするため、next[8]に7を入れます。
【選択肢別解説】
1:× 3はCの位置です。
next[8]を3にするとHの次がCに戻り、リストが循環してしまいます。
2:× 5はEの位置です。
Hの次はGであるべきで、Eを指すと並びが崩れます。
3:○ Hの次の要素はGで、Gはbox[7]にあるので、next[8]は7になります。
4:× 8はH自身の位置です。
next[8]を8にするとHが自分自身を指し、リストが終わらなくなります。
【ポイント】
連結リストへの挿入は、前の要素のポインタを新しい要素に向け、新しい要素のポインタを元の次の要素に向ける2か所の書換えです。
配列上の位置と、リスト上の順番を混同しないことが大切です。