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

时间:2014-04-08 11:37:02

标签: c++ recursion data-structures

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

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

 struct Node
 {
      string data;
      Node *next;
 }

 void List::~List()  {
     destructor_helper(head);
 }

我的回答是:

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

我的答案错了,有人会帮我解决问题。

2 个答案:

答案 0 :(得分:5)

你的回答是错误的,因为你没有进行任何重新分配。

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

void destructor_helper(Node *n) {
    if (n == NULL) return;
    Node* next = n->next;
    delete n;
    destructor_helper(next);
} 

您可以轻松找到递归的基本情况,即当前节点为NULL时。那时我们只需要回来。然后,我们将下一个节点存储在名为next的局部变量中,然后删除当前节点。 next局部变量可以是NULL,但这并不重要。然后我们递归传递next以删除列表的其余部分。

答案 1 :(得分:1)

** SPOILER **

void Destructor_Helper(Node *n) {
    cout<< n->data << endl;
    if (n->next != NULL)
    {
        Destructor_Helper(n->next);
    }
    delete n;
}

应该做的伎俩。