Это самая безумная вещь, которую я когда-либо видел ...

я есть очень простой C-код для построения списка с одиночными связями, как показано ниже, в котором я динамически распределяю память для каждого узла с помощью 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
   }


}

Ответы на вопрос(5)

Ваш ответ на вопрос