如何为递归函数编写方法定义
How to write a method definition for a recursive function?
我有一个家庭作业问题,上面写着:
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);
}
我的答案算错了,有人能帮我解决这个问题吗。
您的答案被计算错误,因为您没有进行任何释放。
要取消分配链表,可以存储下一个节点,取消分配当前节点,然后递归地转到下一个结点。我会这样做:
void destructor_helper(Node *n) {
if (n == NULL) return;
Node* next = n->next;
delete n;
destructor_helper(next);
}
您可以很容易地发现递归的基本情况,即当前节点为NULL
时。到那时,我们只需要返回。然后,我们将下一个节点存储在一个名为next
的局部变量中,并删除当前节点。next
局部变量可以是NULL
,这并不重要。然后我们递归地传递next
以删除列表的其余部分。
**扰流板**
void Destructor_Helper(Node *n) {
cout<< n->data << endl;
if (n->next != NULL)
{
Destructor_Helper(n->next);
}
delete n;
}
应该做这个把戏。
相关文章:
- 在方法定义中显式指定命名空间
- 没有针对完全专用模板类的外联虚拟方法定义
- 将虚拟方法定义为私有方法时会发生什么情况?
- 单独的类声明和方法定义文件问题
- Eclipse CDT 不了解方法定义是什么
- C 方法定义具有模板
- Eclipse CDT将方法定义定义到标头文件
- 模板方法定义的问题 - 错误C2244:无法将函数定义与现有声明匹配
- 如何为 Product* getProductFromID(std::string)编写方法定义;.
- gdb 中的方法定义没有源代码
- 方法定义中的错误"passing const List<int> as this argument discards qualifiers"
- Sendmessage在方法定义内部无法正常工作
- C 公共方法定义后定义
- C++模板方法定义在类中不匹配
- 为什么通用模板方法定义与模板类专用化不匹配?
- 方法定义中的C++模板参数
- C++方法定义和变量声明
- 在继承层次结构中将方法定义为虚拟方法一次,以使多态性发挥作用
- 未为非访问器方法定义C++类属性
- 无法将一个类的方法定义为另一个类的好友