删除链表

时间:2019-06-14 08:28:34

标签: data-structures

我正在尝试使用free()函数删除完整的链表,但是它不起作用。为什么?

void delete(Node** head_ref)
     {
         free(*head_ref);
         return;
     }

 delete(&head);

1 个答案:

答案 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语言编写代码了,所以如果有任何错误,请告诉我。