删除链表C ++中的节点

时间:2016-02-22 01:59:14

标签: c++

所以我很难让它上班,即使经过大量的谷歌搜索,我也无法让它发挥作用。以下是我正在开展的工作:

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)
    {}
};

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

1 个答案:

答案 0 :(得分:1)

您尚未初始化临时值。如果您正在查看列表中的第一个元素,它将指向垃圾。此外,您需要删除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;
}