我正在尝试使用free()函数删除完整的链表,但是它不起作用。为什么?
void delete(Node** head_ref)
{
free(*head_ref);
return;
}
delete(&head);
答案 0 :(得分:0)
您只是删除列表的头节点。其余节点仍然在那里。有两种方法可以做您想做的事。
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语言编写代码了,所以如果有任何错误,请告诉我。