删除链表中的节点C++

Deleting a node in a linked list C++

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

所以我很难让它工作,即使经过广泛的谷歌搜索,我也无法完全让它工作。这是我正在处理的功能:

bool deleteOneOf(const std::string & target)
{
    Node * ptr = _first;
    Node * temp;
    while (ptr != nullptr)
    {
        if (target != ptr->_entry)
        {
            temp = ptr;
            ptr = ptr->_link;
        }
        else
        {
            temp->_link = ptr->_link;
            delete ptr->_link;
            return true;
        }
    }
    return false;
}

我必须使用的 Node 类是这样的:

class Node
{
public:
    std::string _entry;
    Node * _link;
    Node(std::string entry, Node * link) : _entry(entry), _link(link)
    {}
};

非常感谢任何帮助,谢谢。

您尚未初始化 temp。 如果您正在查看列表中的第一个元素,它将指向垃圾。 此外,您需要删除 ptr。 固定代码:

bool deleteOneOf(const std::string & target)
{
    Node * ptr = _first;
    Node * temp = nullptr;
    while (ptr != nullptr)
    {
        if (target != ptr->_entry)
        {
            temp = ptr;
            ptr = ptr->_link;
        }
        else
        {
            if (temp)
                temp->_link = ptr->_link;
            else
                _first = ptr->_link;
            delete ptr;
            return true;
        }
    }
    return false;
}