【发布时间】:2017-04-19 21:21:08
【问题描述】:
int StringList::remove(string value)
{
if ((head == NULL) || (value > tail->data) || (value < head->data))
{
return false;
}
if ((head == tail) && (head->data == value))
{
delete head;
head = tail = NULL;
return true;
}
if ((head->data) == value)
{
head = head->next;
delete head->previous;
head->previous = NULL;
return true;
}
if ((tail->data) == value)
{
tail = tail->previous;
delete tail->next;
tail->next = NULL;
return true;
}
Node *nodeToDelete = head;
while ((nodeToDelete->data) < value)
{
nodeToDelete = nodeToDelete->next;
}
if ((nodeToDelete->data) == value)
{
nodeToDelete->previous->next = nodeToDelete->next;
nodeToDelete->next->previous = nodeToDelete->previous;
delete nodeToDelete;
return true;
}
else
{
return false;
}
}
我在这里有一个双向链表,我试图删除给定字符串的所有出现。目前该功能只会删除一个事件,这很好但不太有效。我相信我需要以某种方式实现一个计数器变量,该变量将计算给定字符串被删除的次数,但我不太确定如何去做。
【问题讨论】:
-
为什么需要计数器。只需枚举列表并删除字符串匹配的任何节点。如果您需要以某种方式返回已删除的实例数,那是一个几乎相关的问题。
-
真的没那么相关吗?
-
是的,确实不相关。您遍历列表,拉出匹配的节点并根据需要处理它们。除非该函数专门针对特定数量的移除,否则多少无关紧要。
-
您所拥有的:
void removeAll(string value) { while(remove(value)) /*empty*/; }。 (即使它不是性能)
标签: c++ linked-list doubly-linked-list