[英]C++ linked lists
我正在使用列表类的修改版本进行分配。
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。所以输出是AB,而不是ABDE它应该是。
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;
}
除非我缺少您的要求的一部分,否则这应该是全部。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.