C ++链表

时间:2015-10-12 01:12:40

标签: c++ list nodes

我正在使用列表类的修改版本进行作业。

class List
{
private:
    class Node
    {
    public:
        std::string _entry;
        Node * _link;

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

我想要完成的目标是在输入列表后,我需要能够删除一个成员,如果我输入:

a
b
c
d
e

我需要能够删除c,其余部分不受影响。我的职责是:

    bool deleteOneOf(const std::string & target)
        {
            Node * & del = _first;
            Node *  temp = _first;
            if (contains(target))
            { 
               del = find(temp, target);
               del = del->_link;
            }
                delete temp;
                return true;

            }
            else
            {
                return false;
            }

        }

,查找功能是:

Node * & find(Node * & ptr, const std::string & target)
    {
        if (ptr == nullptr || ptr->_entry == target)
        {
            return ptr;
        }
        else
        {
            return find(ptr->_link, target);
        }
    }

我遇到的问题是如果我输入C被删除,它没有正确地将B链接到D,所以C,D,E都被删除而不仅仅是C. 所以输出是A B,而不是应该是A B D E.

1 个答案:

答案 0 :(得分:0)

deleteOneOf()中的代码对我来说有点混乱。我不清楚你试图实施什么方法,但它不一定非常复杂。

我假设_first是指向列表的头指针。在那种情况下:

bool deleteOneOf(const std::string & target)
{
    Node **del = &_first;

    while (*del)
    {
         if ((*del)->_entry == target)
         {
             Node *ptr=*del;

             (*del)=ptr->_link;
             delete ptr;
             return true;
         }

         del=&(*del)->_link;
     }
     return false;
}

除非我遗漏了你的部分要求,否则这应该是所有需要的。