2013-08-07 21 views
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

如果沒有「節點」的定義肯定會很難回答這個問題。 –

+2

@TimothyJones:我會把你的「難」提升到「不可能」。 –

+0

@TimothyJones編輯 – Oleksiy

回答

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; 
} 

我唯一擔憂的內存泄漏會適當關注釋放節點的內容,但是因爲你存儲一個簡單的整型,不應該有任何存在的問題。

假設您的列表有指向節點的有效指針並且頭指針也是有效的,那麼其他一切似乎都很好。

+0

一般情況下,我有一個「如果當前!=這個」在刪除和標記錯誤的情況下。 – Galigator

+0

使用引用代替指針有什麼好處? – gravitas

+1

@RSinghS你不能傳遞一個空對象,不能傳遞即時值(左值),並且更明確地告訴你的源代碼閱讀器,你想修改傳遞變量(它不是*,那在指針的情況下顯而易見)。進一步閱讀:http://stackoverflow.com/questions/7058339/c-when-to-use-references-vs-pointers – Spook