0

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

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

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

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

4

1 回答 1

2

我认为您必须在删除任何元素之前检查列表是否为空。当列表只有一个元素时,还实现 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;
   }
}
于 2013-08-05T15:18:50.063 回答