我有一个家庭作业问题说:
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);
}
我的答案错了,有人会帮我解决问题。
答案 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;
}
应该做的伎俩。