У меня очень простой код C для построения списка Singlely Link, как показано ниже, в котором я выделяю память для каждого node динамически, используя malloc. В конце кода я хочу освободить память для каждого выделенного node, задавался вопросом, как это сделать - если я сначала начну с head node и освобожу его, указатели на последующие узлы будут потеряны и память утечка происходит.
Другой способ - начать с head node и сохранить указатель node в отдельном массиве указателей или что-то в этом роде, перемещать список до указателя хвоста, сохраняя указатели node, и однажды достигнуть хвоста node, сохраните это также в другом массиве указателей и начните освобождаться от этого индекса массива назад, пока голова node не будет свободна.
Это единственный способ добиться того, что я пытаюсь сделать?
Если я не хочу использовать второй буфер, как мне это сделать.
#include "stdio.h"
#include "stdlib.h"
struct lnk_lst
{
int val;
struct lnk_lst * next;
};
typedef struct lnk_lst item;
main()
{
item * curr, * head;
int i,desired_value;
head = NULL;
for(i=1;i<=10;i++)
{
curr = (item *)malloc(sizeof(item));
curr->val = i;
curr->next = head;
head = curr;
}
curr = head;
while(curr) {
printf("%d\n", curr->val);
curr = curr->next;
}
//How to free the memory for the nodes in this list?
for(i=1;i<=10;i++)
{
free()//?? What logic here
}
}