回答編集履歴

10

誤字

2022/12/05 19:31

投稿

jimbe
jimbe

スコア12646

test CHANGED
@@ -19,5 +19,5 @@
19
19
  >これと同じ要領で、新たに入力した要素を最後尾に持っていくためには、ダミーデータとして置いているlistHead.nextをNULLとして置くのではないかと考えています。
20
20
 
21
21
  上に書きました通り、最後尾の next は NULL にするのであって、 next を NULL にすれば(何かしらの力で ?) それまで追加したデータの最後尾に行く訳ではありません。
22
- listHead の next をNULL にしたら listHead が最後尾として扱われ、つまりリストのデータが何も無かった最初の状態になるだけです。(ついでにそれまで mallic() されたメモリが放置されメモリリークとなります。)
22
+ listHead の next をNULL にしたら listHead が最後尾として扱われ、つまりリストのデータが何も無かった最初の状態になるだけです。(ついでにそれまで malloc() されたメモリが放置されメモリリークとなります。)
23
23
  変数への代入は、ただ値を入れるという処理だけです。その変数が変わることで処理が変わるようなプログラムを書かない限り、何も起きません。

9

追加

2022/12/05 19:22

投稿

jimbe
jimbe

スコア12646

test CHANGED
@@ -7,3 +7,17 @@
7
7
  1 をやった後は 2 をやるかどうかだけで入力正順か入力逆順かが変わるという感じですね。
8
8
 
9
9
  ついでに、 showList 内の ```p=pHead;``` は ```p=pHead->next;``` が良いかと。ダミーデータは入力データじゃないですし。
10
+
11
+ ---
12
+
13
+ >最後尾の次の要素はNULLとして置く、これが最後尾であるということだと学びました。
14
+
15
+ 学んだという表現に若干違和感があるのですが、NULL だから最後尾なのではありません。
16
+ 『最後尾の next は NULL にする』と(このリストの仕様を決めた人が)決めたということです。
17
+ 要は通常のリンク(アドレス)と区別が付けば何でも良いことなのですが、ポインタに入る値で明らかに通常のアドレスとして扱われない値として一般的なのが NULL なので、特別な理由が無い限り NULL が使われているだけなのです。
18
+
19
+ >これと同じ要領で、新たに入力した要素を最後尾に持っていくためには、ダミーデータとして置いているlistHead.nextをNULLとして置くのではないかと考えています。
20
+
21
+ 上に書きました通り、最後尾の next は NULL にするのであって、 next を NULL にすれば(何かしらの力で ?) それまで追加したデータの最後尾に行く訳ではありません。
22
+ listHead の next をNULL にしたら listHead が最後尾として扱われ、つまりリストのデータが何も無かった最初の状態になるだけです。(ついでにそれまで mallic() されたメモリが放置されメモリリークとなります。)
23
+ 変数への代入は、ただ値を入れるという処理だけです。その変数が変わることで処理が変わるようなプログラムを書かない限り、何も起きません。

8

修正

2022/12/05 14:08

投稿

jimbe
jimbe

スコア12646

test CHANGED
@@ -1,9 +1,9 @@
1
1
  常に pIns が最期の要素を指すようにすれば良いように思います。
2
- 1) ループ内の ```pIns=&listHead;``` を for の直前に移動。
2
+ 1) ループ内の ```pIns=&listHead;``` を ```for(~){``` の直前に移動。
3
3
  2) ```pIns->next=pNew;``` の後で ```pIns=pNew;```
4
4
  な感じでしょうか。
5
5
 
6
- 逆順なら pIns は常に &listHead を指すだけなのでループの中でも外でも構いませんが、正順ならループで変わっていくのでループの外でする必要があります。
6
+ 逆順なら pIns は常に listHead を指すだけなのでループの中でも外でも構いませんが、正順ならループで変わっていくのでループの外でする必要があります。
7
7
  1 をやった後は 2 をやるかどうかだけで入力正順か入力逆順かが変わるという感じですね。
8
8
 
9
9
  ついでに、 showList 内の ```p=pHead;``` は ```p=pHead->next;``` が良いかと。ダミーデータは入力データじゃないですし。

7

修正

2022/12/05 14:06

投稿

jimbe
jimbe

スコア12646

test CHANGED
@@ -1,8 +1,9 @@
1
1
  常に pIns が最期の要素を指すようにすれば良いように思います。
2
- 1) ループ内の ```pIns=&listHead;``` を for の直前に移動。元々 pIns はループで変わらないのでループの中にある必要はありません。
2
+ 1) ループ内の ```pIns=&listHead;``` を for の直前に移動。
3
3
  2) ```pIns->next=pNew;``` の後で ```pIns=pNew;```
4
4
  な感じでしょうか。
5
5
 
6
+ 逆順なら pIns は常に &listHead を指すだけなのでループの中でも外でも構いませんが、正順ならループで変わっていくのでループの外でする必要があります。
6
- 1 は現状でも外に移動させて構わないので、(1 をやった後は ) 2 をやるかどうかで入力順か入力逆順かが変わるという感じですね。
7
+ 1 をやった後は 2 をやるかどうかだけで入力順か入力逆順かが変わるという感じですね。
7
8
 
8
9
  ついでに、 showList 内の ```p=pHead;``` は ```p=pHead->next;``` が良いかと。ダミーデータは入力データじゃないですし。

6

修正

2022/12/05 13:59

投稿

jimbe
jimbe

スコア12646

test CHANGED
@@ -3,6 +3,6 @@
3
3
  2) ```pIns->next=pNew;``` の後で ```pIns=pNew;```
4
4
  な感じでしょうか。
5
5
 
6
- 1 は現状でも外に移動させて構わないので、 2 をやるかどうかで入力順か入力逆順かが変わるという感じですね。
6
+ 1 は現状でも外に移動させて構わないので、(1 をやったら後は ) 2 をやるかどうかで入力順か入力逆順かが変わるという感じですね。
7
7
 
8
8
  ついでに、 showList 内の ```p=pHead;``` は ```p=pHead->next;``` が良いかと。ダミーデータは入力データじゃないですし。

5

修正

2022/12/05 13:43

投稿

jimbe
jimbe

スコア12646

test CHANGED
@@ -1,8 +1,8 @@
1
1
  常に pIns が最期の要素を指すようにすれば良いように思います。
2
2
  1) ループ内の ```pIns=&listHead;``` を for の直前に移動。元々 pIns はループで変わらないのでループの中にある必要はありません。
3
- 2) showList を呼んいる直前で ```pIns=pNew;```
3
+ 2) ```pIns->next=pNew;``` の後で ```pIns=pNew;```
4
4
  な感じでしょうか。
5
5
 
6
6
  1 は現状でも外に移動させて構わないので、 2 をやるかどうかで入力順か入力逆順かが変わるという感じですね。
7
7
 
8
- ついでに、 showList 内の ```p=pHead;``` は ```p=pHead->next;``` が良いかと。
8
+ ついでに、 showList 内の ```p=pHead;``` は ```p=pHead->next;``` が良いかと。ダミーデータは入力データじゃないですし。

4

修正

2022/12/05 13:40

投稿

jimbe
jimbe

スコア12646

test CHANGED
@@ -1,7 +1,8 @@
1
1
  常に pIns が最期の要素を指すようにすれば良いように思います。
2
- 1) ループ内の ```pIns=&listHead;``` を for の直前に移動。
2
+ 1) ループ内の ```pIns=&listHead;``` を for の直前に移動。元々 pIns はループで変わらないのでループの中にある必要はありません。
3
3
  2) showList を呼んでいる直前で ```pIns=pNew;```
4
4
  な感じでしょうか。
5
+
5
- ( ```pNew->next = pIns->next;``` 不要ですが NULL なのでそのままでも )
6
+ 1 は現状でも外に移動させて構わないので、 2 をやるかどうかで入力順か入力逆順か変わるという感じです
6
7
 
7
8
  ついでに、 showList 内の ```p=pHead;``` は ```p=pHead->next;``` が良いかと。

3

修正

2022/12/05 13:37

投稿

jimbe
jimbe

スコア12646

test CHANGED
@@ -1,5 +1,5 @@
1
1
  常に pIns が最期の要素を指すようにすれば良いように思います。
2
- 1) ループ内の ``pIns=&listHead;``` を for の直前に移動。
2
+ 1) ループ内の ```pIns=&listHead;``` を for の直前に移動。
3
3
  2) showList を呼んでいる直前で ```pIns=pNew;```
4
4
  な感じでしょうか。
5
5
  ( ```pNew->next = pIns->next;``` が不要ですが NULL なのでそのままでも。 )

2

修正

2022/12/05 13:36

投稿

jimbe
jimbe

スコア12646

test CHANGED
@@ -1,7 +1,7 @@
1
1
  常に pIns が最期の要素を指すようにすれば良いように思います。
2
- 1) ループ内の pIns=&listHead; を消す
2
+ 1) ループ内の ``pIns=&listHead;``` for の直前に移動
3
- 2) for の直前に pIns=&listHead; を入れる。
4
- 3) showList を呼直前で pIns=pNew;
3
+ 2) showList を呼んでいる直前で ```pIns=pNew;```
5
4
  な感じでしょうか。
5
+ ( ```pNew->next = pIns->next;``` が不要ですが NULL なのでそのままでも。 )
6
6
 
7
7
  ついでに、 showList 内の ```p=pHead;``` は ```p=pHead->next;``` が良いかと。

1

追記

2022/12/05 13:31

投稿

jimbe
jimbe

スコア12646

test CHANGED
@@ -3,3 +3,5 @@
3
3
  2) for の直前に pIns=&listHead; を入れる。
4
4
  3) showList を呼ぶ直前で pIns=pNew;
5
5
  な感じでしょうか。
6
+
7
+ ついでに、 showList 内の ```p=pHead;``` は ```p=pHead->next;``` が良いかと。