Удаление узлов списка ссылок без рекурсии

У меня есть структура данных с двойной связью, которая выглядит следующим образом:

введите описание изображения здесь

Структура

Node выглядит следующим образом:

typedef struct {
    int32_t type;
    int32_t valueint;
    double  valuedouble;
    struct  cNODE *next;
    struct  cNODE *prev;
    struct  cNODE *child;
} cNODE;

Каждый node имеет дочерний элемент, который может указывать на другой node/дважды связанный список одного и того же элемента (node). До сих пор я использовал следующий код для удаления этой полной структуры данных:

/* 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;
    }
}

Но это рекурсивная функция. У меня есть определенное требование, когда я не могу использовать рекурсию. Может ли это удаление быть реализовано без рекурсии? Любые примеры приветствуются.