Удаление узлов связанного списка без рекурсии
У меня есть структура данных двусвязного списка, которая выглядит следующим образом:
Структура узла выглядит следующим образом:
typedef struct {
int32_t type;
int32_t valueint;
double valuedouble;
struct cNODE *next;
struct cNODE *prev;
struct cNODE *child;
} cNODE;
Каждый узел имеет дочерний элемент, который может указывать на другой узел / дважды связанный список того же типа элемента (узла). До сих пор я использовал следующий код для удаления этой полной структуры данных:
/* Delete a cNODE structure. */
void cNODE_Delete(cNODE *c)
{
cNODE*next;
while (c)
{
next=c->next;
if (!(c->type)) && c->child)
{
cNODE_Delete(c->child)
};
free(c);
c=next;
}
}
Но это рекурсивная функция. У меня есть определенное требование, когда я не могу использовать рекурсию. Можно ли реализовать это удаление без рекурсии? Любые примеры приветствуются.