我正在使用列表类的修改版本进行作业。
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.
答案 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;
}
除非我遗漏了你的部分要求,否则这应该是所有需要的。