递归删除最后两个节点

时间:2015-02-20 04:50:05

标签: c++ list recursion linear

我试图以递归方式删除线性链表中的最后两个。我不明白为什么这段代码是段错误的。请帮忙。是否有更好或更正确的方法来递归删除最后两个节点?

int remove(node * & head)
{

    if(!head)
      return 0;

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


    if(!head -> next -> next)
    {     
        return remove(head -> next);

        delete head;
        head = NULL;

    }   


   return  remove(head -> next);


    }

1 个答案:

答案 0 :(得分:0)

仔细查看head->next == NULL

会发生什么
if(!head -> next)
{    
  delete head;
  head = NULL;
}

if(!head -> next -> next)
{
  return remove(head -> next);
  //some more code that can never be reached
}

...您设置head=NULL,然后取消引用它。还有其他问题,但这是一个很好的起点。