2016-03-17 85 views
-1

如何刪除單鏈表中的最後一個節點?它不與頭就像我可能只是寫:單鏈表刪除最後一個節點

void DeleteNode (node *& head, node *& tail, int val) 
{ 
    node * p = nullptr; 
    node * tmp = nullptr; 

    if (val == head -> data) 
    { 
     delete head; 
     head = head -> next; 
    } 
... 

我可以刪除最後一個節點,這樣的:

if (val == tail -> data) 
{ 
    delete tail; 
} 

但後來我怎麼可以設置尾部到前一個節點(在雙鏈表,我可以只寫tail = tail - > prev切換到前一個節點)。

我想類似的東西:

tail = head; 
while (tail != nullptr) 
{ 
    tail = tail -> next 
} 

但它不應該工作,因爲這是我刪除的最後尾節點仍然某處內存和以前的節點仍然指向有那麼它不指向NULL它不會停在那裏。

目錄結構:

struct node 
{ 
    int data; 
    node * next; 

    node() : next (nullptr) { } 

}; 
+0

爲何會出現目前如此多的鏈表的問題?它是大學聯結名單的教學時間嗎? – Matt

回答

4

您可以使用刪除代碼的最後一個節點,但不清除從鏈表的尾部項。

爲了解決您的問題,你必須從那裏前往尾節點的最近節點,

  1. 你要刪除的最後一個節點
  2. 設置null到最近的節點的next

現在看到正確的代碼,

prev = NULL; 
tail = head; 
while (tail->next != NULL) { 
    prev = tail; 
    tail = tail->next; 
} 
delete tail; // tail points to the last node 
if (prev) { 
    prev->next = NULL; // now pre points to the new last node 
} 
相關問題