回答編集履歴
4
訂正
answer
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
> if (p == 0)
|
9
9
|
> break;
|
10
10
|
|
11
|
-
リストが残り1つの場合、ソートが完了したとして、ループを抜けます。
|
11
|
+
おそらく、リストが残り1つの場合、ソートが完了したとして、ループを抜けます。
|
12
12
|
|
13
13
|
> exchange(head, p);
|
14
14
|
> //大小を入れ替える
|
3
訂正
answer
CHANGED
@@ -23,4 +23,5 @@
|
|
23
23
|
1. リストheadから要素pを引っこ抜いて、抜けた部分を繋ぎ直す。
|
24
24
|
2. リストheadの先頭に要素pを追加して、要素pを新しいリストの先頭にする。
|
25
25
|
> if (&((*p)->next) == q || &((*q)->next) == p) {
|
26
|
+
|
26
27
|
尚、この条件ではリストの先頭要素と要素pが隣り合っているかどうかチェックしていますが、ポインタのつなぎ替えの順番を工夫すれば、1つにまとめることも可能です。
|
2
追記
answer
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
> if (p == 0)
|
9
9
|
> break;
|
10
10
|
|
11
|
-
|
11
|
+
リストが残り1つの場合、ソートが完了したとして、ループを抜けます。
|
12
12
|
|
13
13
|
> exchange(head, p);
|
14
14
|
> //大小を入れ替える
|
@@ -17,4 +17,10 @@
|
|
17
17
|
|
18
18
|
> head = &((*head)->next);
|
19
19
|
|
20
|
-
ループの最後では、先頭の次の要素を新たな先頭にして、処理を繰り返します。
|
20
|
+
ループの最後では、先頭の次の要素を新たな先頭にして、処理を繰り返します。
|
21
|
+
|
22
|
+
で、関数exchange(head, p)の中身ですが、以下の処理を行っています。
|
23
|
+
1. リストheadから要素pを引っこ抜いて、抜けた部分を繋ぎ直す。
|
24
|
+
2. リストheadの先頭に要素pを追加して、要素pを新しいリストの先頭にする。
|
25
|
+
> if (&((*p)->next) == q || &((*q)->next) == p) {
|
26
|
+
尚、この条件ではリストの先頭要素と要素pが隣り合っているかどうかチェックしていますが、ポインタのつなぎ替えの順番を工夫すれば、1つにまとめることも可能です。
|
1
追記
answer
CHANGED
@@ -3,4 +3,18 @@
|
|
3
3
|
> //(*head)->nameと(*head)->next)のnameとを比べて
|
4
4
|
> //小さいほうのポインタのポインタを返却値にしている。
|
5
5
|
|
6
|
-
関数listmin(head)は、リストの全ての要素をチェックして、いちばん小さいnameを持つ要素を返していると思われます。そうでないと正しくソートされません。
|
6
|
+
関数listmin(head)は、名前からリストの全ての要素をチェックして、いちばん小さいnameを持つ要素を返していると思われます。そうでないと正しくソートされません。
|
7
|
+
|
8
|
+
> if (p == 0)
|
9
|
+
> break;
|
10
|
+
|
11
|
+
おそらく、リストが残り1つの場合、ソートが完了したとして、ループを抜けます。
|
12
|
+
|
13
|
+
> exchange(head, p);
|
14
|
+
> //大小を入れ替える
|
15
|
+
|
16
|
+
ここでは、見つけたいちばん小さい要素を関数exchange(head, p)で先頭に移動しています。
|
17
|
+
|
18
|
+
> head = &((*head)->next);
|
19
|
+
|
20
|
+
ループの最後では、先頭の次の要素を新たな先頭にして、処理を繰り返します。
|