这是递归删除链表的正确方法吗?



我想知道这是否正确,因为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;
    }
}

设置nodeNULL通常是一种让系统知道它是空的方法。设置NULL节点通常会使您的程序更安全,因为当您试图删除NULL节点时,编译器或IDE可能会通知您这是NULL节点。为了更深入的理解,您可以查找一些关于空指针的说明。

相关内容

  • 没有找到相关文章

最新更新