【问题标题】:Recursive Call to Clear Linked List?递归调用清除链表?
【发布时间】:2019-02-26 08:28:09
【问题描述】:

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

我不确定如何完成这个:

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

       if (*presentNode == NULL)
           return;

       LIST *nextNode;

       clearRecursively(&nextNode, endNode);

      *presentNode = NULL;
      *endNode = NULL;
}

【问题讨论】:

  • 链表是线性结构,不太适合递归算法。如果您的问题是螺丝,请不要使用锤子。
  • @toohonestforthissite 链表是一种递归结构...
  • @user633183:不是这样。指针不是它指向的对象。它与递归有关的只是你可以用它来实现一个堆栈,但那是另一回事。只是出于好奇:那么环形列表会是无限递归吗?
  • 你的工作是让这个明显损坏的代码工作吗?我建议你先找到一些简单的、有效的链表代码,然后用它来了解它们应该如何工作。

标签: c list recursion linked-list nodes


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 2017-04-21
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    相关资源
    最近更新 更多