如何为递归函数编写方法定义?

use*_*152 2 c++ recursion data-structures

我有一个家庭作业问题说:

Destructor_Helper是一个递归函数,可以解除分配单链表的每个节点.编写destructor_helper的方法定义.

 struct Node
 {
      string data;
      Node *next;
 }

 void List::~List()  {
     destructor_helper(head);
 }
Run Code Online (Sandbox Code Playgroud)

我的回答是:

     void Destructor_Helper(Node *n) {
     cout<< n->data << endl;
     if (n->next != NULL)
          Destructor_Helper(n->next);
 } 
Run Code Online (Sandbox Code Playgroud)

我的回答被认为是错误的,有人会帮我解决问题.

Sho*_*hoe 5

您的回答是错误的,因为您没有进行任何释放.

要取消分配链接列表,您可以存储下一个节点,取消分配当前值,然后在下一个节点上递归递送.我会这样:

void destructor_helper(Node *n) {
    if (n == NULL) return;
    Node* next = n->next;
    delete n;
    destructor_helper(next);
} 
Run Code Online (Sandbox Code Playgroud)

您可以轻松找到递归的基本情况,即当前节点所在的情况NULL.那时我们只需要回来.然后,我们将下一个节点存储在一个被调用的局部变量中,next然后删除当前节点.该next局部变量可以是NULL,也没关系.然后我们next递归传递以删除列表的其余部分.