質問編集履歴
3
見出しも追加しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -29,9 +29,9 @@
|
|
29
29
|
}
|
30
30
|
|
31
31
|
```
|
32
|
-
|
32
|
+
###関連するソースコード
|
33
33
|
```
|
34
|
-
|
34
|
+
ノードの定義や、ノードを作成、リストを表示する関数も付記します。
|
35
35
|
●ノードの定義
|
36
36
|
typedef int data_t;
|
37
37
|
typedef struct nodetag
|
2
問題のあるコードと、関連コードとを分割して表示するようにしました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -28,6 +28,9 @@
|
|
28
28
|
}
|
29
29
|
}
|
30
30
|
|
31
|
+
```
|
32
|
+
|
33
|
+
```
|
31
34
|
*ノードの定義や、ノードを作成、リストを表示する関数も付記します。
|
32
35
|
●ノードの定義
|
33
36
|
typedef int data_t;
|
1
```でソースコードを閉じ、インシデントを表示するようにしました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -6,83 +6,86 @@
|
|
6
6
|
現在のソースコードでは、例えばリストが{123}であれば{321}と表示したいのに{1}とだけ表示されてしまいます。
|
7
7
|
|
8
8
|
###該当のソースコード
|
9
|
+
|
9
|
-
```C
|
10
|
+
```lang-C
|
10
|
-
node_t
|
11
|
+
node_t nodeReverse(node_t **ndPtrPtr)
|
11
12
|
{
|
12
|
-
int
|
13
|
+
int i = 0;
|
13
|
-
node_t
|
14
|
+
node_t *Pro_ptr1;
|
14
|
-
|
15
|
+
node_t *Pro_ptr2;
|
15
|
-
while(*ndPtrPtr
|
16
|
+
while(*ndPtrPtr != NULL){
|
16
|
-
|
17
|
+
if(i == 0){
|
17
|
-
|
18
|
+
Pro_ptr1 = *ndPtrPtr;
|
18
|
-
|
19
|
+
ndPtrPtr = &((*ndPtrPtr) -> next);
|
19
|
-
|
20
|
+
Pro_ptr1 -> next = NULL;
|
20
|
-
|
21
|
+
}else if(i != 0){
|
21
|
-
|
22
|
+
Pro_ptr2 = *ndPtrPtr;
|
22
|
-
|
23
|
+
ndPtrPtr = &((*ndPtrPtr) -> next);
|
23
|
-
|
24
|
+
Pro_ptr2 -> next = Pro_ptr1;
|
24
|
-
|
25
|
+
Pro_ptr1 = Pro_ptr2;
|
25
|
-
|
26
|
+
}
|
26
|
-
|
27
|
+
i++;
|
27
28
|
}
|
28
|
-
}
|
29
|
+
}
|
29
30
|
|
30
31
|
*ノードの定義や、ノードを作成、リストを表示する関数も付記します。
|
31
32
|
●ノードの定義
|
32
|
-
typedef
|
33
|
+
typedef int data_t;
|
33
|
-
|
34
|
-
typedef
|
34
|
+
typedef struct nodetag
|
35
35
|
{
|
36
|
-
data_t
|
36
|
+
data_t data;
|
37
|
-
struct
|
37
|
+
struct nodetag *next;
|
38
|
-
}node_t;
|
38
|
+
}node_t;
|
39
39
|
|
40
40
|
●ノードの作成
|
41
|
-
node_t
|
41
|
+
node_t *nodeNew(data_t dt, node_t *nxt)
|
42
42
|
{
|
43
|
-
node_t
|
43
|
+
node_t *ndPtr;
|
44
|
-
|
45
|
-
ndPtr
|
44
|
+
ndPtr = malloc(sizeof(node_t));
|
46
|
-
if(ndPtr
|
45
|
+
if(ndPtr == NULL){
|
47
|
-
return
|
46
|
+
return NULL;
|
48
47
|
}else{
|
49
|
-
ndPtr
|
48
|
+
ndPtr -> data = dt;
|
50
|
-
|
49
|
+
ndPtr -> next = nxt;
|
51
|
-
|
50
|
+
return ndPtr;
|
52
51
|
}
|
53
52
|
}
|
54
|
-
|
53
|
+
|
55
54
|
●リストにノードを後から加える関数
|
56
|
-
int
|
55
|
+
int nodeAppend(node_t **ndPtrPtr, data_t dt)
|
57
56
|
{
|
58
|
-
node_t
|
57
|
+
node_t *ndPtr;
|
59
|
-
|
60
|
-
ndPtr
|
58
|
+
ndPtr = nodeNew(dt, NULL);
|
61
|
-
if(ndPtr
|
59
|
+
if(ndPtr == NULL){
|
62
|
-
return
|
60
|
+
return FAILURE;
|
63
61
|
}
|
64
|
-
|
62
|
+
|
65
|
-
while(*ndPtrPtr
|
63
|
+
while(*ndPtrPtr != NULL){
|
66
|
-
ndPtrPtr
|
64
|
+
ndPtrPtr = &((*ndPtrPtr) -> next);
|
67
65
|
}
|
68
|
-
*ndPtrPtr
|
66
|
+
*ndPtrPtr = ndPtr;
|
69
|
-
return
|
67
|
+
return SUCCESS;
|
70
|
-
}
|
68
|
+
}
|
71
69
|
|
72
70
|
●リストの表示
|
73
|
-
void
|
71
|
+
void listPrint(node_t *ndPtr)
|
74
72
|
{
|
75
73
|
printf("{");
|
76
|
-
while(ndPtr
|
74
|
+
while(ndPtr != NULL){
|
77
|
-
printf("%d",
|
75
|
+
printf("%d", ndPtr -> data);
|
78
|
-
|
76
|
+
ndPtr = ndPtr -> next;
|
79
77
|
}
|
80
78
|
printf("}\n");
|
81
|
-
}
|
79
|
+
}
|
80
|
+
```
|
82
81
|
|
83
82
|
###試したこと
|
84
83
|
ノードごとにある次のノードを示すポインタ変数、nextの値を変更するために、ポインタ変数を二つ作りました。
|
85
84
|
現在いるノードのアドレスと一つ前のアドレスをそれぞれに格納。それらをそれぞれのノードのnextに逆順に格納していくことで、課題を実現しようとしました。
|
86
85
|
|
87
86
|
###補足情報(言語/FW/ツール等のバージョンなど)
|
88
|
-
使用開発環境:BCC Developer 1.2.21
|
87
|
+
使用開発環境:BCC Developer 1.2.21
|
88
|
+
|
89
|
+
###最後に
|
90
|
+
機能をうまく活用できず、分かりにくい表示で最初投稿してしまいました。
|
91
|
+
申し訳ありません。
|