2

只想知道这个删除链表的实现是否有任何缺陷/不一致/内存泄漏:

// Function to delete the entire linked list
void deleteList(Node** head) {

    Node* current = *head;
    Node* next;

    while (current != 0) {

        next = current->next;
        delete current;
        current = next;

    }

    *head = 0;
}

编辑:

struct Node {

    int data;
    Node* next;
    Node(int data) : data(data){}

};
4

1 回答 1

1

如果您通过引用而不是指针传递头指针,那将是更多的 C++:

void deleteList(Node * & head)
{
    // (...)

    head = nullptr; // NULL in C++ pre-11
}

此外,为了让代码更整洁,您可以next在循环内移动声明:

while (current != 0) 
{
    Node * next = current->next;
    delete current;
    current = next;
}

我对内存泄漏的唯一担心是正确释放节点的内容,但是由于您存储了一个简单的 int,所以那里不应该有任何问题。

假设您的列表具有指向节点的有效指针并且头指针也有效,那么其他一切似乎都很好。

于 2013-08-07T06:18:47.333 回答