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

时间:2013-03-17 14:45:44

标签: c++ recursion linked-list

我想知道这是否正确,因为XCode在执行getNext()时会给我一个EXC_BAD_ACCESS错误,但Visual Studio却没有。

void deleteList(LinkedList* node) {

    if (node == NULL)
        return;
    else {
        delete node;
        node=NULL;
        deleteList(node->getNext());
    }
}

2 个答案:

答案 0 :(得分:2)

删除节点,使其无效,然后使用它来调用getNext()。这是未定义的行为。

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

struct NodeT
{
  NodeT* next;
  ~NodeT()
  {
    delete next;
  }
};

或者首先删除尾部,然后才删除节点本身:

void deleteList(LinkedList* node) {

    if (node == NULL)
        return;
    else {
        deleteList(node->getNext());
        delete node;
    }
}

答案 1 :(得分:0)

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