递归调用以清除链接列表?

时间:2018-09-21 23:08:17

标签: c list recursion linked-list nodes

我正在寻找一种清除链表的解决方案,这就是我所得到的。

我不确定如何完成此操作:

void clearRecursively(LIST **presentNode, LIST **endNode){

       if (*presentNode == NULL)
           return;

       LIST *nextNode;

       clearRecursively(&nextNode, endNode);

      *presentNode = NULL;
      *endNode = NULL;
}

1 个答案:

答案 0 :(得分:0)

您正在传递一个指向什么都没有的指针:clearRecursively(&nextNode, endNode);

除了将指针分配给NULL之外,不会删除它们所指向的内存-free(POINTER_NAME)就是为此。

很明显,我认为您的意思是删除-由于尚未提供完整的代码,因此,这是一种方法(例如,出于此目的),它假定它是一个单链表:

 //THIS TRAVERSES DOWN THE LINKED-LIST AND THEN DELETES THAT LAST NODE
 //RECURSIVELY IT DELETES THE ENTIRE LIST

 void clear_recursively(LIST **head)
 {
      if(*head!=NULL)
      {
           clear_recursively(&((*head)->next));
           free(*head);
           *head=NULL;
      }
 }

您只需要传递head指针(指向第一个节点的指针)的地址即可。

如果明确地说,您只是要将整个链接列表的数据字段设置为值,则:

 void clear_recursively(LIST *head)
 {
      if(head!=NULL)
      {
           clear_recursively(head->next);
           head->data = //SOME VALUE;
      }
 }