Удаление всех элементов односвязного списка - C (СИ)
Формулировка задачи:
есть односвязный список из
причем у последнего элемента next=NULL;
допустимо ли очистить его рекурсивно вот так?
то что остается первый элемент - я знаю. но удаляются ли корректно все остальные элементы? (со второго по последний)
struct el{
int val;
struct el* next;
};void clear(struct el* base){
if (base->next == NULL)
return;
else{
clear(base->next);
free(base->next);
base->next=NULL;
return;
}
}Решение задачи: «Удаление всех элементов односвязного списка»
textual
Листинг программы
void clear(struct el* base)
{
if (base)
{
clear(base->next);
free(base);
base = NULL;
}
}
Объяснение кода листинга программы
В данном коде представлена функция clear, которая предназначена для удаления всех элементов из односвязного списка.
void clear(struct el* base)- объявление функции с типом возвращаемого значения void и параметром типа struct el* base, который указывает на голову списка.if (base)- проверка на то, что база списка не равна NULL, чтобы избежать выхода за границы массива.clear(base->next)- рекурсивный вызов функции clear для следующего элемента списка, который хранится в параметре base->next.free(base)- освобождение памяти, выделенной под элементом списка, который находится в параметре base.base = NULL- обновление значения параметра base до NULL, чтобы указать на то, что список пуст. В результате выполнения данного кода, все элементы односвязного списка будут удалены, а память, выделенная под ними, будет освобождена.