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 に答える