問題「線形リストのプログラムのfreeNODEを再帰からループに書き換え」の手も足も出ない状態でどうしたらよいのか全く分からないので、解答と解説をお願いしたいです。
###liner-list.c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int val;
struct node *next;
} NODE;
void freeNODE(NODE *p);
void printNODE(NODE *p);
int main(void)
{
NODE *top, *last, *ptr, *p;
FILE *fp;
int n;
if((fp = fopen("data.txt", "rt")) == NULL){ fprintf(stderr, "data.txt not found\n"); exit(0); } top = last = NULL; while((fscanf(fp, "%d", &n) != EOF)){ ptr = (NODE *)malloc(sizeof(NODE)); ptr->val = n; ptr->next = NULL; if(last == NULL){ top = ptr; last = top; } else { last->next = ptr; last = last->next; } } printNODE(top);
/*
p = top;
while(p != NULL){
printf("%d\n", p->val);
p = p->next;
}
*/
freeNODE(top);
return 0;
}
void printNODE(NODE *p)
{
if(p == NULL){
return;
}
printf("%d\n", p->val);
printNODE(p->next);
}
void freeNODE(NODE *p)
{
if(p == NULL){
return;
}
freeNODE(p->next);
free(p);
}
###data.txt
10
1
2
3
4
5
6
7
8
9
10
回答1件
あなたの回答
tips
プレビュー