c - 递归调用清除链表?

标签 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;
}

最佳答案

您传递的指针不指向任何内容: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;
      }
 }

关于c - 递归调用清除链表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52452016/

相关文章:

c - 底层字符集是否只依赖于 C 实现?

c - 接受论据并使用它

c - Windows 10 中的 malloc 比 Windows 7 慢

java - 如何返回列表 “s” 中 2 个第一批学生的列表?

python - 将 Python 2D 矩阵/列表转换为表格

java - 为给定的大小为 n 的集合查找大小为 k 的子集

c - 如何在我的 C 程序中捕获此 "This application has requested the Runtime to terminate it in an unusual way"错误?

jquery - 垂直和水平折叠列表

c++ - 如何递归检查数字是否为斐波那契数?

javascript - 为什么这个 JS 函数按升序而不是降序返回数字?