2015-11-06 820 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,那么不要打开这段代码 - 你的教授会知道你没有写出它。不要使用指针指针。