вы просто удаляете головной узел списка.Остальные узлы все еще там.Есть два способа сделать то, что вы хотите сделать.
void delete(Node** head_ref)
{
if(head_ref==NULL){
return;
}
delete(head_ref->next);
free(*head_ref);
return;
}
delete(&head);
и если вы хотите сделать это без рекурсии
void delete(Node** head_ref)
{
Node** temp_head = head_ref;
while(temp_head!=NULL){
temp_head = head_ref;
head_ref = head_ref->next;
free(*temp_head);
temp_head = head_ref;
}
return;
}
delete(&head);
PS Я не написал код на C длядолгое время, так что если есть какие-либо ошибки, дайте мне знать.