LinkedList - Como liberar a memória alocada usando malloc
Eu tenho um código C muito simples para construir uma lista Singly Linked como abaixo, no qual aloco memória dinamicamente para cada nó usando malloc. No final do código, quero liberar a memória para cada nó alocado, estava pensando em como fazê-lo - se eu começar do nó principal e liberá-lo, os ponteiros para os nós subsequentes serão perdidos e ocorrerá um vazamento de memória.
Outra maneira é iniciar a partir do nó principal e continuar armazenando o ponteiro do nó em uma matriz separada de ponteiros ou algo assim, percorrer a lista até o ponteiro final, enquanto armazena os ponteiros do nó, e quando chegar ao nó final, armazene-o também na outra matriz de ponteiros e comece a liberar esse índice de matriz para trás até que o nó principal seja liberad
Essa é a única maneira de conseguir o que estou tentando fazer?
Caso não queira usar o segundo buffer, como faço para fazê-l
#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
}
}