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)
我的回答被认为是错误的,有人会帮我解决问题.
您的回答是错误的,因为您没有进行任何释放.
要取消分配链接列表,您可以存储下一个节点,取消分配当前值,然后在下一个节点上递归递送.我会这样:
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递归传递以删除列表的其余部分.