teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

質問をうけて、回答を追加

2021/05/04 03:43

投稿

TakaiY
TakaiY

スコア14536

answer CHANGED
@@ -17,4 +17,60 @@
17
17
  t.next = n
18
18
  ```
19
19
 
20
- もとのリストがどのように表現されているかわからないので、とりあえず、末尾がわかっているとしときました。
20
+ もとのリストがどのように表現されているかわからないので、とりあえず、末尾がわかっているとしときました。
21
+
22
+ ---
23
+ 質問でもらったソースをできるだけ生かせばこんな感じでしょうか。
24
+ ```python
25
+ public boolean add(String obj) throws NullPointerException{ //boolean -> void
26
+ if(obj == null) {
27
+ throw new NullPointerException("obj cannot store a null reference!");
28
+ }
29
+ else {
30
+ // currentの設定はここにあってはだめ。
31
+ Node newNode = new Node(null, null, obj); //このタイミングではではprevを決められないのでnullとしておく。
32
+ if(head == null) {
33
+ head = newNode;
34
+ tail = newNode; // tailの更新を追加。 空だったときはどちらも同じノードを指す。
35
+ // 単一ノードなので、newNodenのnextもprevもnullの儘
36
+ }
37
+ else {
38
+ Node current = head; //currentの設定はここに移動。
39
+ while(current.next != null) {
40
+ current = current.next;
41
+ }
42
+ current.next = newNode;
43
+ newNode.prev = current //ここでnewNodeのprevが設定できる。
44
+ tail = newNode; // tailは、最後のノードそのものを指している。 newNode.next ではrnullになっちゃう。
45
+ }
46
+ }
47
+ return true;
48
+ }
49
+ ```
50
+
51
+
52
+ さて、そもそもtailで末尾を持っているのだから、末尾を捜す処理は不要なので、こんな感じ。
53
+
54
+ ``` python
55
+ public boolean add(String obj) throws NullPointerException{ //boolean -> void
56
+ if(obj == null) {
57
+ throw new NullPointerException("obj cannot store a null reference!");
58
+ }
59
+ else {
60
+
61
+ Node newNode = new Node(null, null, obj);
62
+
63
+ if(head == null) {
64
+ head = newNode;
65
+ tail = newNode;
66
+ }
67
+ else {
68
+ tail.next = newNode;
69
+ newNode.prev = tail;
70
+ tail = newNode;
71
+ }
72
+ }
73
+ return true;
74
+ }
75
+
76
+ ```

1

追記

2021/05/04 03:43

投稿

TakaiY
TakaiY

スコア14536

answer CHANGED
@@ -5,4 +5,16 @@
5
5
  nextはnull, prevにはTを指定する。
6
6
  - TのnextにNを設定する。
7
7
 
8
- これでよいかと。
8
+ これでよいかと。
9
+
10
+ ---
11
+ こんな感じ? 上に書いた通りですが。
12
+
13
+ ```java
14
+ t = // リストの末尾
15
+
16
+ Node n = new Node(null, t, "hoge")
17
+ t.next = n
18
+ ```
19
+
20
+ もとのリストがどのように表現されているかわからないので、とりあえず、末尾がわかっているとしときました。