【问题标题】:Deleting Bottom and Top node in a LinkedList [closed]删除 LinkedList 中的底部和顶部节点
【发布时间】:2013-08-05 14:42:33
【问题描述】:

我坐在图书馆里,我想出了两个功能。删除链表底部和顶部节点的 removefrombottom 函数和 removefromtop 函数。我想知道这段代码是否可行,或者我的逻辑是否不正确。如果我错了,任何建议将不胜感激。这是我想出的

void removefrombottom()
{
  StringListNode *curr = pBottom;
  pBottom = pBottom->pPrev;
  delete curr;
}

void removefromtop()
{
  StringListNode *curr = pTop;
  pTop = pTop->pNext;
  delete curr;
}

这些实际上会删除链表的头部和尾部吗?

【问题讨论】:

  • 您可以使用基于 Web 的编译器进行测试,例如 coliru.stacked-crooked.com
  • @John 会尝试这样做,但只需在您的意见中查看即可;这似乎可行吗?
  • 当然,但这不是一个有用的问题。如果有个错误,它们就在你没有显示的东西中,所以这只是一个伪代码审查。
  • @Useless 我只问逻辑是否正确。
  • 这个问题似乎是题外话,因为它是关于审查代码,应该在codereview.stackexchange.com

标签: c++ function linked-list


【解决方案1】:

我认为您必须在删除任何元素之前检查列表是否为空。并在列表只有一个元素时实现 pTop 和 pBottom 指针。

void removefrombottom()
{
   if(pBottom != NULL){ //OR if(size > 0){
       StringListNode *curr = pBottom;
       pBottom = pBottom->pPrev;
       if(curr == pTop) pTop = NULL;
       delete curr;
       //--size;
   }
}

void removefromtop()
{
   if(pTop != NULL){ //OR if(size > 0){
       StringListNode *curr = pTop;
       pTop = pTop->pNext;
       if(curr == pBottom) pBottom = NULL;
       delete curr;
       //--size;
   }
}

【讨论】:

  • 我只是假设这些是在列表中充满了很多项目时调用的函数。但是,您是绝对正确的。感谢您的建议!
猜你喜欢
  • 1970-01-01
  • 2020-12-05
  • 2017-12-08
  • 2018-04-01
  • 1970-01-01
  • 2021-09-30
  • 1970-01-01
  • 2011-06-13
  • 1970-01-01
相关资源
最近更新 更多