从链表c ++中删除最后一个节点

时间:2015-11-06 03:13:18

标签: c++ linked-list

当我运行此代码时,它return是正确的数字,但之后它不会delete

我尝试了其他几项功能,但他们也没有工作。 我的功能有问题还是我应该在外面看?

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 个答案:

答案 0 :(得分:2)

问题是没有执行return语句后的ANYTHING。

因此,将clean->数字值复制到某个临时变量,删除clean并返回临时变量的值。

答案 1 :(得分:1)

您必须将指向要删除的节点的指针归零 - 无论是头指针还是前一节点中的下一个指针。

然后你可以删除它并返回号码。此外,正如保罗指出的那样,你必须记住数字,删除节点,然后返回它。

我一直这样做:

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;

这样,我们总是有指向节点指针的指针,这就是我们必须抛出的东西。

现在,如果这是一个分配,那么不要输入这个代码 - 你的教授会知道你没有写它。没有指针指针就可以了。