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

回答編集履歴

5

誤植

2018/06/21 08:43

投稿

takabosoft
takabosoft

スコア8356

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  2018/06/21 17:19 回答を修正します(課題の細かい部分は突っ込まないようにします)。
2
2
 
3
- この課題は、「片方向連結リスト」で末尾に番兵ノード(ダミーノード)がる事が特徴です。
3
+ この課題は、「片方向連結リスト」で末尾に番兵ノード(ダミーノード)がる事が特徴です。
4
4
  また、headという先頭ノードがありますが、これは番兵ではなく実データを指しているというところもポイントです。
5
5
 
6
6
  > if (Next == tail) {
@@ -30,7 +30,6 @@
30
30
  head = current->next;
31
31
  delete current;
32
32
  current = head;
33
- continue;
34
33
  } else {
35
34
  // 途中のデータを消す場合
36
35
  prev->next = current->next;

4

修正が反映されない。

2018/06/21 08:43

投稿

takabosoft
takabosoft

スコア8356

answer CHANGED
@@ -15,9 +15,7 @@
15
15
  「前のデータのnextを現在のnextに繋ぎ変える」という事をします。
16
16
  ただし、削除対象が先頭データの場合は「前のデータ」は無いので別の処理を行います。
17
17
 
18
- あんまりテストしていませんが、大体こんな感じで動くのではないかと思います。
19
18
 
20
-
21
19
  ```c
22
20
  /*ここに適切なプログラムを書きなさい*/
23
21
  Node* prev = NULL;
@@ -46,4 +44,6 @@
46
44
  }
47
45
 
48
46
  /*ここまで*/
49
- ```
47
+ ```
48
+
49
+ あんまりテストしていませんが、大体こんな感じで動くのではないかと思います。

3

テラテイルのシステムおかしくないですか、本文修正したのにそのとおりに表示されないことがあります。

2018/06/21 08:37

投稿

takabosoft
takabosoft

スコア8356

answer CHANGED
@@ -17,6 +17,7 @@
17
17
 
18
18
  あんまりテストしていませんが、大体こんな感じで動くのではないかと思います。
19
19
 
20
+
20
21
  ```c
21
22
  /*ここに適切なプログラムを書きなさい*/
22
23
  Node* prev = NULL;

2

回答の修正

2018/06/21 08:37

投稿

takabosoft
takabosoft

スコア8356

answer CHANGED
@@ -1,12 +1,48 @@
1
- 末尾ダミーノードが二種類あるはおと思います。
1
+ 2018/06/21 17:19 回答を修正します(課題かい部分は突っ込まなようにします
2
2
 
3
- > Node* dummy = new Node(); // 末尾ダミーノード
3
+ この課題は、「片方向連結リスト」で末尾に番兵ノード(ダミーノード)が要る事が特徴です。
4
- > Node* tail = dummy; // 末尾ポイン
4
+ また、headという先頭ノードがありますが、これは番兵ではなく実データを指しているというところもポイントです。
5
5
 
6
+ > if (Next == tail) {
7
+ > tail = current;
6
- ここを直したら、
8
+ > }
7
9
 
10
+ ↑ここですが、tail(末尾の番兵ノード)はリストの終りを示す存在なので、
8
- > //誕生日が偶数ノード削除
11
+ tailそもの差し替えることは無いはずです。
12
+ 差し替える可能性があるのはheadです。
9
13
 
14
+ この「片方向連結リスト」で「現在」を削除したい場合は、
15
+ 「前のデータのnextを現在のnextに繋ぎ変える」という事をします。
10
- う一連の処理を一旦コメントアウトしてリストが正しく表示されるか確認してください。
16
+ ただし、削除対象が先頭データの場合は「前のデータ」は無いので別の処理をます
11
17
 
12
- しく表示されるのであれば、問題箇所「誕生日が偶数のノードを削除」の部分だとわます。
18
+ あんまりテストていませんが、大体こんな感じで動くのではないと思います。
19
+
20
+ ```c
21
+ /*ここに適切なプログラムを書きなさい*/
22
+ Node* prev = NULL;
23
+ current = head;
24
+ while (current != tail) {
25
+ if (current->birthday % 2 == 0) {
26
+
27
+ // currentの削除を行う
28
+
29
+ if (current == head) {
30
+ // 先頭データを消す場合
31
+ head = current->next;
32
+ delete current;
33
+ current = head;
34
+ continue;
35
+ } else {
36
+ // 途中のデータを消す場合
37
+ prev->next = current->next;
38
+ delete current;
39
+ current = prev->next;
40
+ }
41
+ } else {
42
+ prev = current;
43
+ current = current->next;
44
+ }
45
+ }
46
+
47
+ /*ここまで*/
48
+ ```

1

説明文の改善

2018/06/21 08:29

投稿

takabosoft
takabosoft

スコア8356

answer CHANGED
@@ -7,6 +7,6 @@
7
7
 
8
8
  > //誕生日が偶数のノードを削除
9
9
 
10
- という部分を一旦コメントアウトしてリストが正しく表示されるか確認してください。
10
+ という一連の処理を一旦コメントアウトしてリストが正しく表示されるか確認してください。
11
11
 
12
12
  正しく表示されるのであれば、問題箇所は「誕生日が偶数のノードを削除」の部分だとわかります。