这是递归删除链表的正确方法吗?
C++: Is this the proper way to delete a linked list recursively?
我想知道这是否正确,因为XCode在做getNext()时给了我一个EXC_BAD_ACCESS错误,但Visual Studio没有。
void deleteList(LinkedList* node) {
if (node == NULL)
return;
else {
delete node;
node=NULL;
deleteList(node->getNext());
}
}
删除一个节点,使其无效,然后用它来调用getNext()
。这是未定义行为。
在nodes的析构函数中做同样的工作。
struct NodeT
{
NodeT* next;
~NodeT()
{
delete next;
}
};
要么这样,要么先删除尾部,然后再删除节点本身:
void deleteList(LinkedList* node) {
if (node == NULL)
return;
else {
deleteList(node->getNext());
delete node;
}
}
设置node
为NULL
通常是一种让系统知道它是空的方法。设置NULL
节点通常会使您的程序更安全,因为当您试图删除NULL
节点时,编译器或IDE可能会通知您这是NULL
节点。为了更深入的理解,您可以查找一些关于空指针的说明。
相关文章:
- C++:正在检查LinkedList中的回文-递归方法-错误
- 数组元素打印的递归方法
- 如何在 c++ 的类中递归调用函数方法?
- 使用非递归插入方法实现 AVL 树
- 这是定义一组递归规则的正确方法吗?
- 退出c++中的递归void方法
- 我对 leetcode 72 上的递归方法感到茫然
- 使用递归方法遇到分段错误
- 转换循环以递归基本方法
- 我的链接列表反向递归方法的代码的问题是什么?
- 递归std ::函数定义模板类方法
- 在链接列表中找到值的递归方法
- 为什么非回归方法比递归需要更多的时间
- 是否有一种方法可以使此C 14递归模板在C 17中短
- Union-Find方法性能,迭代与递归
- 我应该如何实现递归方法以找到在C++中形成最大堆的多种方法
- 是否有对 Clang 递归 ASTVisitor 的最终访问方法
- 使用OpenMP并行化此递归的最佳方法
- 使用递归方法将矢量作为输入时进行分割故障
- 使用递归方法的类,使用int矢量元素作为输入