2015-11-06 818 views
0

當我運行此代碼時,它return是正確的數字,但它不是delete它之後。從鏈表中刪除最後一個節點C++

我嘗試了幾個其他功能,他們也不工作。 我的功能有問題嗎?還是我應該在外面看?

int Stack::remove() 
{ 
    clean = head; //clean is what it to be deleted. Head is the beginning 

    while (clean->next != NULL) //stop at the end of list 
    { 
    clean = clean->next; //move it along 
    } 

    return clean->number; //this gives me the right number 
    delete clean; //but when I print list in main, last item is still there 
    clean = NULL; //something about dangling pointers 
} 

回答

2

問題是沒有執行return語句之後的任何東西。

因此,將clean-> number值複製到某個臨時變量中,刪除clean並返回臨時變量的值。

1

您必須將指向您要刪除的節點的指針(無論是頭指針還是之前節點中的下一個指針)清零。

然後你可以刪除它並返回數字。另外,如Paul所示,您必須記住該號碼,刪除節點,然後返回。

我一直這樣做的話吧:

if (head == NULL) { 
    //return some error condition 
} 
Node **pclean = &head; 
while ((*pclean)->next != NULL) { 
    pclean = &((*pclean)->next); 
} 
int ret = (*pclean)->number; 
delete *pclean; 
*pclean = NULL; 
return ret; 

這樣,我們總是有指針指向節點,這就是我們要空出來。

現在,如果這是一個assigment,那麼不要打開這段代碼 - 你的教授會知道你沒有寫出它。不要使用指針指針。