繁体   English   中英

C ++:这是以递归方式删除链表的正确方法吗?

[英]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() 这是未定义的行为。

只需在节点析构函数中执行相同的工作即可。

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节点。 为了更深入地理解,您可以查找有关空指针的一些说明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM