ダブルリンクドリストで最後に新しいノードを追加したいのですが、Nodeクラスのコンストラクターは一つしかありません。
Nodeクラスのコンストラクターを使ってどのように新しいノードを追加すればいいのでしょうか。
Node.java
public class Node { public Node next; public Node prev; private String t; public Node(Node next, Node prev, String token) { this.next = next; this.prev = prev; this.t = token; }
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
末尾のノードのnextに何が設定されているのかわかりませんが、nullとしておきましょう。
- 末尾のノードをつかまえる。Tとする。
- 新規のノードを作成する。Nとする。
nextはnull, prevにはTを指定する。 - TのnextにNを設定する。
これでよいかと。
こんな感じ? 上に書いた通りですが。
java
1t = // リストの末尾 2 3Node n = new Node(null, t, "hoge") 4t.next = n
もとのリストがどのように表現されているかわからないので、とりあえず、末尾がわかっているとしときました。
質問でもらったソースをできるだけ生かせばこんな感じでしょうか。
python
1public boolean add(String obj) throws NullPointerException{ //boolean -> void 2 if(obj == null) { 3 throw new NullPointerException("obj cannot store a null reference!"); 4 } 5 else { 6 // currentの設定はここにあってはだめ。 7 Node newNode = new Node(null, null, obj); //このタイミングではではprevを決められないのでnullとしておく。 8 if(head == null) { 9 head = newNode; 10 tail = newNode; // tailの更新を追加。 空だったときはどちらも同じノードを指す。 11 // 単一ノードなので、newNodenのnextもprevもnullの儘 12 } 13 else { 14 Node current = head; //currentの設定はここに移動。 15 while(current.next != null) { 16 current = current.next; 17 } 18 current.next = newNode; 19 newNode.prev = current //ここでnewNodeのprevが設定できる。 20 tail = newNode; // tailは、最後のノードそのものを指している。 newNode.next ではrnullになっちゃう。 21 } 22 } 23 return true; 24}
さて、そもそもtailで末尾を持っているのだから、末尾を捜す処理は不要なので、こんな感じ。
python
1public boolean add(String obj) throws NullPointerException{ //boolean -> void 2 if(obj == null) { 3 throw new NullPointerException("obj cannot store a null reference!"); 4 } 5 else { 6 7 Node newNode = new Node(null, null, obj); 8 9 if(head == null) { 10 head = newNode; 11 tail = newNode; 12 } 13 else { 14 tail.next = newNode; 15 newNode.prev = tail; 16 tail = newNode; 17 } 18 } 19 return true; 20} 21
投稿2021/05/03 04:56
編集2021/05/04 03:43総合スコア13847
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/03 05:08
2021/05/03 06:09
2021/05/03 06:14
2021/05/03 07:36
2021/05/03 07:41
2021/05/03 08:03
2021/05/03 11:04 編集
2021/05/03 10:10 編集
2021/05/04 02:37
2021/05/04 03:34
2021/05/04 04:51
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。