c++ - 从链表中删除节点

标签 c++ linked-list

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

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

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 循环的底部。

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

相关文章:

c# - 是否有编译为机器代码的 C C++ C# 编译器

c++ - 非推导上下文中模板参数推导的解决方法

java - 递归搜索链表

java - 双向链表

java - 我的链接列表没有返回正确的值或正确更新列表

c - 错误 : not a member of structure or union, 导致内存泄漏

c++ - SDL:初始化 TTF 问题。可能是自由打字?

Java List.add() 方法添加一个可修改的对象

c# - 如何在 C# 上为包装的 C++ 方法编写签名,该方法具有指向函数及其参数的指针?

java - 使用迭代器删除时出现链接列表错误