• ベストアンサー

今度はcircular singly linked listです…

度々、すみません。切羽詰っています(汗)。 Write a method to insert a node at the front of a circular singly linked list. The circular list maintains only one reference to the tail node as shown in figure 3.15 on page 91.                     tail                     ↓  →|10|→...→|5|→|20|- |                        |  ----------------- Add 100                             tail                             ↓  →|100|→|10|→...→|5|→|20|- |                              |  --------------------- (きっと)基となるメソッド public void addToTail(int el) { if (isEmpty()) { tail = new IntNode(el); tail.next = tail; else { tail.next = new IntNode(el, tail.next); tail = tail.next; } } 私自作のメソッド public void addToFront(int el) { if (isEmpty()) { tail = new IntNode(el); tail.next = tail; else { tail = new IntNode(el, tail); tail.next = tail; } } if文のisEmptyの部分は正解だそうです。 ただ、else文の中が間違っているそうです。 勘でtailとtail.nextをそっくり逆にしたんですけど 駄目だったようです。 でも他にもう案は浮かびません。 リンクの神様、どうかお助け下さい。m(__)m

質問者が選んだベストアンサー

  • ベストアンサー
  • m_hagizo
  • ベストアンサー率65% (31/47)
回答No.1

メソッドを追加する元のクラス自体が分からないので、なんとも言えません…。 が、前の質問と同様に、nextの考慮が足りないと思われます。 新しく追加するノードのnextは、今まで先頭のノードになっていたもののはずですので、少なくともnew IntNode(el, tail) は間違いでしょう。 tailの次が新しく追加したノードで、新しく追加したノードの次がこれまで先頭(?)であったノードになる、ということをプログラムで正しく表現できれば良いでしょう。

ginkgo
質問者

お礼

ありがとうございました。

ginkgo
質問者

補足

ご回答、ありがとうございます。 無い知恵を振り絞って考えたところ、下のようになりました。 else { tail.next = new IntNode(el, tail.next); //tail = tail.next; ←いらない } つまり、AddToTailとほとんど同じコードなのですがTailの位置を移動させない、 よって新しく追加されたノードは先頭として認識される…こんな解釈でよろしいでしょうか? あってます…よね?

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • kacchann
  • ベストアンサー率58% (347/594)
回答No.2

つまり「挿入」ですね…。 「鎖のつなぎ変え」を、絵的に直感的に理解してくだされ。 (No.1の方が最後に書かれている手順のとおりです) ↓かろうじてみつけた図解入り解説。 ■http://www.mybrain.jp/java/DS/DS_linkedList_insert.html  (このページを文字列 "挿入するコード"で検索) ■http://www.mars.dti.ne.jp/~torao/program/structure/linklist.html  (このページを文字列 "データの追加"で検索)

ginkgo
質問者

お礼

ありがとうございました。

ginkgo
質問者

補足

先ほどはどうもありがとうございました。 実はもうそろそろ行かなくちゃ、の時間なので それらのURLを少しだけ拝見させていただきました。 分かりやすいですね。 私らの教科書よりずっと見やすいです。 …それで考えると下に補足した内容であってますよね?

すると、全ての回答が全文表示されます。

関連するQ&A