回答編集履歴

2

free を追加

2021/03/22 19:24

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -119,3 +119,141 @@
119
119
  `top2->next = top2->next->next;` でもいいし、
120
120
 
121
121
  `top2->next = top4;` でもいいのが分かりますか?
122
+
123
+
124
+
125
+ **追記2**
126
+
127
+ ```C
128
+
129
+ #include <stdio.h> // printf
130
+
131
+ #include <stdlib.h> // malloc, free
132
+
133
+
134
+
135
+ struct SUUJI {
136
+
137
+ int suuji;
138
+
139
+ struct SUUJI *next;
140
+
141
+ };
142
+
143
+
144
+
145
+ void list_print(const struct SUUJI *p)
146
+
147
+ {
148
+
149
+ if (p == NULL) return;
150
+
151
+ printf("%d", p->suuji);
152
+
153
+ while (p = p->next) printf("->%d", p->suuji);
154
+
155
+ printf("\n");
156
+
157
+ }
158
+
159
+
160
+
161
+ void list_add(struct SUUJI **lp, int val)
162
+
163
+ {
164
+
165
+ struct SUUJI *np = malloc(sizeof *np);
166
+
167
+ np->suuji = val;
168
+
169
+ np->next = *lp;
170
+
171
+ *lp = np;
172
+
173
+ }
174
+
175
+
176
+
177
+ struct SUUJI *list_delete(struct SUUJI **lp, int val)
178
+
179
+ {
180
+
181
+ for (struct SUUJI *p; p = *lp; lp = &p->next)
182
+
183
+ if (p->suuji == val) {
184
+
185
+ *lp = p->next;
186
+
187
+ return p;
188
+
189
+ }
190
+
191
+ return NULL;
192
+
193
+ }
194
+
195
+
196
+
197
+ void list_free(struct SUUJI *p)
198
+
199
+ {
200
+
201
+ while (p) {
202
+
203
+ struct SUUJI *q = p;
204
+
205
+ p = p->next;
206
+
207
+ free(q);
208
+
209
+ }
210
+
211
+ }
212
+
213
+
214
+
215
+ int main(void)
216
+
217
+ {
218
+
219
+ struct SUUJI *list1 = NULL;
220
+
221
+
222
+
223
+ list_add(&list1, 50);
224
+
225
+ list_add(&list1, 40);
226
+
227
+ list_add(&list1, 30);
228
+
229
+ list_add(&list1, 20);
230
+
231
+ list_add(&list1, 10);
232
+
233
+ list_print(list1);
234
+
235
+
236
+
237
+ struct SUUJI *p = list_delete(&list1, 30);
238
+
239
+ free(p);
240
+
241
+ list_print(list1);
242
+
243
+
244
+
245
+ p = list_delete(&list1, 10);
246
+
247
+ free(p);
248
+
249
+ list_print(list1);
250
+
251
+
252
+
253
+ list_free(list1);
254
+
255
+ list1 = NULL;
256
+
257
+ }
258
+
259
+ ```

1

別のやり方の追記

2021/03/22 19:24

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -107,3 +107,15 @@
107
107
 
108
108
 
109
109
  リストから3番目の要素が削除されています。
110
+
111
+
112
+
113
+ **追記**
114
+
115
+ 本当に理解していますか?
116
+
117
+ `top2->next = top3->next;` の代わりに
118
+
119
+ `top2->next = top2->next->next;` でもいいし、
120
+
121
+ `top2->next = top4;` でもいいのが分かりますか?