2013-02-14 157 views
0

我想從鏈接列表中刪除。但它似乎並沒有工作,如果我嘗試刪除第一個元素。從鏈接列表中刪除數據

if (found) 
{ 
    if (prev == NULL) 
    { 
     prev = head; 
     prev -> next = curr -> next; 
     delete curr; 
    } 
    else 
    { 
     prev -> next = curr -> next; 
     delete curr; 
    } 
} 

return found; 

findNode函數的工作原理,如果我要從中間的某個地方或從尾部刪除。但我想通了,如果我從尾巴刪除,我必須將下一個設置爲NULL,對吧?

+0

您可以顯示'findNode'功能?最重要的是你如何傳遞(並設置)'prev'和'curr'參數。 – 2013-02-14 17:39:52

+0

我有一個頭節點,爲什麼沒有'prev'指向那個頭節點已經成功搜索第一個節點 – 2013-02-14 17:43:27

+0

已編輯我的代碼。 – win 2013-02-14 17:43:33

回答

1

問題是可能是您實際上並沒有將head更改爲指向列表的新頭部。你必須改變head

if (prev == NULL) 
{ 
    head = head->next; // Set `head` to point to the next node, i.e. the new `head` 
    delete curr; 
} 
+0

天哪,我在那裏做了一個愚蠢的錯誤。感謝幫助傢伙!解決了。我改變了prev = head; prev - > next = curr - > next; head = curr - > next; – win 2013-02-14 17:45:39

0

假設findNode是正確的,並設置prev到節點curr之前(可能要考慮一個雙向鏈表),然後

if (prev == NULL) 
    { 
     prev = head; 
     prev -> next = curr -> next; 
     delete curr; 
    } 

不正確。因爲當prev爲NULL時,它是找到的頭節點。

因此,代碼應該是

if (prev == NULL) 
    { 
     head = head->next; 
     delete curr; 
    }