プロが教えるわが家の防犯対策術!

今日はかなり崖っぷちなのでどんどん質問します、すみません。
今回はdoubly linked listの質問です。

Consider the doubly linked list below. After each of the following statements, redraw the list to show the changes that have been made. Process the statements in sequence, that is, each statement should make changes in the list modified by the previous statement.

head->|10| |/|
           ↓ ↑
      | 5| | |
           ↓ ↑
      |20| | |
           ↓ ↑
tail ->|30| | |

1. head.next.next.prev.info = 100;
2. head.next.next.next = tail.prev.prev;
3. heat.next.prev = head.next.next.next.next;

※/はヌル(=Null)の意味です。
(これで分かってくださるといいんですが)

1.と2.は正解だそうです:
1.は上から二番目の5を100に変えました。
2.は上から三番目のnextが今変えたばかりの100を参照するようにしました。

そして問題の3.です。

head.next.prevですからnext(一番目)が二番目を参照して、
prevが今度は一番目を参照するので今現在"/"があるところを…

head.next.next.next.nextに変更ですから
最初のnext(一番目)が二番目を参照して、
二番目のnextが三番目を参照して、
三番目のnextは2.で変更したとおり、二番目を参照して、
四番目のnextは三番目を参照するので…

"/"のprevがずーーーっと伸びて20を参照するように書きました。
でも、間違っているらしいです。
どこがおかしいのでしょうか?
プログラミングの神様、どうかお助け下さい。m(__)m

A 回答 (2件)

ぱっと見、あっているように思いますが、



>"/"のprevがずーーーっと伸びて20を参照するように書きました。
は、「1番目のデータのprevが(を)3番目のデータを参照するように変更」
(つまり、1番目のデータのprevの値であったnullを変更)
の意味にとれます。(ずーーーっと伸びては少々意味不明)
だとすると、たしかに間違ってますね。
更新されるのは、1番目のデータじゃないです

それにしても、2と3の操作の意味って??
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございます。

あ、自分で書いたのをよくよく読んでみると
仰る通り、更新されるのは一番目じゃなくて
二番目のprevですね。
更新する場所は参照先じゃなくて参照元でした。
これで正解です…よね?

2.と3.の操作の意味は本当に謎ですね。
最初見たときは四番目のデータでも消すのかと思いました。

お礼日時:2003/10/16 00:48

>更新されるのは一番目じゃなくて


>二番目のprevですね。

うーん、たぶん、それが正解。

左辺head.next.prev。
これは「head.next(で指されたオブジェクト)のprev変数」のこと。
つまり2段目のprev変数。
    • good
    • 0
この回答へのお礼

Linked listは私にとってはまだややこしいです。
頭の中がスパゲティーのようになってました(@_@)
ようやく解けてきました。
確認して下さってありがとうございました。

お礼日時:2003/10/16 05:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!