c++ - 删除链表中的底部和顶部节点

标签 c++ function linked-list

<分区>

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

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

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

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

最佳答案

我认为您必须在删除任何元素之前检查列表是否为空。当列表只有一个元素时,还实现了 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;
   }
}

关于c++ - 删除链表中的底部和顶部节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18060999/

相关文章:

c++ - 错误LNK1181 : cannot open input file 'kernel32.lib'

c++ - 视觉代码删除函数括号内的空格

c++ - 是否有像 lower_bound 这样的函数返回最后一个值而不是第一个值?

php - 如何从PDO中的存储函数获取返回值?

CSS链接导航浏览器兼容性

c++ - 如何允许用户确定模板类型?

c++ - DVB-T调谐请求参数

c++ - Opencv cpp 使用多线程处理同一视频的不同部分

function - Fortran 中的函数和子例程有什么区别?

c++ - 异常段错误