У меня есть очень простой код на C для построения списка Singly Linked, как показано ниже, в котором я выделяю память для каждого узла динамически с помощью malloc. В конце кода я хочу освободить память для каждого выделенного узла, мне было интересно, как это сделать - если я сначала начну с головного узла и освобожу его, указатели на последующие узлы будут потеряны и произойдет утечка памяти.
Другой способ - начать с головного узла и сохранить указатель узла в отдельном массиве указателей или что-то в этом роде, пройти по списку до указателя хвоста, сохраняя указатели узлов, и, достигнув конечного узла, сохранить его также в другой массив указателей и начните освобождение с этого индекса массива в обратном направлении, пока не освободится головной узел.
Это единственный способ добиться того, что я пытаюсь сделать?
Если я не хочу использовать второй буфер, как мне это сделать.
#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
}
}