- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Javaで単方向リスト作成に行き詰まり)
Javaで単方向リスト作成に行き詰まり
このQ&Aのポイント
- Javaで単方向リストの作成方法として、append()を使用する際に1件目のvalueやnextの値にアクセスする方法が分からない。
- 質問の内容は、Javaで単方向リストを作成しようとしており、1件目のノードのvalueやnextの値をどのようにアクセスすればいいか分からないということです。
- Javaで単方向リストを作成する際に、append()を使用しようとしていますが、1件目のvalueやnextの値にアクセスする方法がわかりません。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
線形リストを表現する時には、私の好みでは各アイテムをあらわすNodeクラスと、Nodeクラスのチェインに対する操作を提供するChainクラスに分ける方が良いと思うのだが、ここではNodeクラスのみで線形リストを表すようなので、それに沿って話を進める。 まず、最後に追加するには、「現在自分が最後のノードであるかどうか」だけ分かればよい。言い方を変えれば、次のノードがあるかないかだ。あれこれ説明してもあれなので、サンプルソースを用意した。参考にしてもらえれば。 public void append(int v){ if(this.next == null) { this.next = new Node(v); return; } this.next.append(v); } これを見れば一発で分かるが、再帰を使っている。 1.自分の次がnullなら(自分が最後なら)、自分の後ろにNodeインスタンスを追加して終了 2.そうでなければ、次に任せる このように、線形リストや二分木など、次のアイテムへのポインタで操作するようなデータ構造は再帰を使うとすっきりする。線形リストを印字するのも簡単だ。先頭から1行に1つ印字を行うルーチンも書いてみた。これもNodeクラスに入れる。 public void printAll() { System.out.println(this.value); // 自分を印字 if(this.next == null) { // 次が無ければ(自分が最後なら) return; // 終わり } this.next.printAll(); // 次のノードに印字命令 } }
お礼
ありがとうございます。 再帰処理を使用するとは思いませんでした。 あと、this.nextを使用するということも思いつかなかったので新しい発見になりました。