回答編集履歴

2

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

2021/05/04 03:43

投稿

TakaiY
TakaiY

スコア13847

test CHANGED
@@ -37,3 +37,115 @@
37
37
 
38
38
 
39
39
  もとのリストがどのように表現されているかわからないので、とりあえず、末尾がわかっているとしときました。
40
+
41
+
42
+
43
+ ---
44
+
45
+ 質問でもらったソースをできるだけ生かせばこんな感じでしょうか。
46
+
47
+ ```python
48
+
49
+ public boolean add(String obj) throws NullPointerException{ //boolean -> void
50
+
51
+ if(obj == null) {
52
+
53
+ throw new NullPointerException("obj cannot store a null reference!");
54
+
55
+ }
56
+
57
+ else {
58
+
59
+ // currentの設定はここにあってはだめ。
60
+
61
+ Node newNode = new Node(null, null, obj); //このタイミングではではprevを決められないのでnullとしておく。
62
+
63
+ if(head == null) {
64
+
65
+ head = newNode;
66
+
67
+ tail = newNode; // tailの更新を追加。 空だったときはどちらも同じノードを指す。
68
+
69
+ // 単一ノードなので、newNodenのnextもprevもnullの儘
70
+
71
+ }
72
+
73
+ else {
74
+
75
+ Node current = head; //currentの設定はここに移動。
76
+
77
+ while(current.next != null) {
78
+
79
+ current = current.next;
80
+
81
+ }
82
+
83
+ current.next = newNode;
84
+
85
+ newNode.prev = current //ここでnewNodeのprevが設定できる。
86
+
87
+ tail = newNode; // tailは、最後のノードそのものを指している。 newNode.next ではrnullになっちゃう。
88
+
89
+ }
90
+
91
+ }
92
+
93
+ return true;
94
+
95
+ }
96
+
97
+ ```
98
+
99
+
100
+
101
+
102
+
103
+ さて、そもそもtailで末尾を持っているのだから、末尾を捜す処理は不要なので、こんな感じ。
104
+
105
+
106
+
107
+ ``` python
108
+
109
+ public boolean add(String obj) throws NullPointerException{ //boolean -> void
110
+
111
+ if(obj == null) {
112
+
113
+ throw new NullPointerException("obj cannot store a null reference!");
114
+
115
+ }
116
+
117
+ else {
118
+
119
+
120
+
121
+ Node newNode = new Node(null, null, obj);
122
+
123
+
124
+
125
+ if(head == null) {
126
+
127
+ head = newNode;
128
+
129
+ tail = newNode;
130
+
131
+ }
132
+
133
+ else {
134
+
135
+ tail.next = newNode;
136
+
137
+ newNode.prev = tail;
138
+
139
+ tail = newNode;
140
+
141
+ }
142
+
143
+ }
144
+
145
+ return true;
146
+
147
+ }
148
+
149
+
150
+
151
+ ```

1

追記

2021/05/04 03:43

投稿

TakaiY
TakaiY

スコア13847

test CHANGED
@@ -13,3 +13,27 @@
13
13
 
14
14
 
15
15
  これでよいかと。
16
+
17
+
18
+
19
+ ---
20
+
21
+ こんな感じ? 上に書いた通りですが。
22
+
23
+
24
+
25
+ ```java
26
+
27
+ t = // リストの末尾
28
+
29
+
30
+
31
+ Node n = new Node(null, t, "hoge")
32
+
33
+ t.next = n
34
+
35
+ ```
36
+
37
+
38
+
39
+ もとのリストがどのように表現されているかわからないので、とりあえず、末尾がわかっているとしときました。