从链表中删除节点

Remove node from a linked list

本文关键字:节点 删除 链表      更新时间:2023-10-16

我一直坚持这个函数从列表中删除节点,如果列表中有两个名字,它们都消失了。如果Anne和John都在列表中,而我想删除Anne,那么我的列表为空,John消失了。

如果我删除节点init,我缺少什么来保持列表中的连接?

bool ContactList::remove(string key)
{
      NodePtr prev = NULL;
       for(NodePtr temp = head; temp != NULL; temp = temp->link)
       {
            if(temp->data.key == key)
            {
                if(prev == NULL)
                {
                    head = temp->link;
                    delete temp;
                    return true;
                }
                else
                {
                    prev = temp->link;
                    delete temp;
                    return true;
                 }
             }
         }
     return false;
}

您没有在循环的每次迭代中保持prev是最新的。你想要这样的:

prev = temp;

for循环的底部

尝试使用这个函数

bool ContactList::remove(string key)
{
  NodePtr prev = NULL;
   for(NodePtr temp = head; temp != NULL; temp = temp->link)
   {
        if(temp->data.key == key)
        {
            if(prev == NULL)
            {
                head = temp->link;
                delete temp;
                return true;
            }
            else
            {
                prev->link = temp->link;   // change.
                delete temp;
                return true;
             }
         }
         prev = temp;      // change.
     }
 return false;
}