【发布时间】:2015-04-23 12:32:37
【问题描述】:
我正在尝试编写的函数: bool LinkedList::removeFirst(Node *node, int v);
如果在列表中找到 v,则返回 true 并删除列表的第一个元素。如果 v 不在列表中,则返回 false。
我对解决方案的尝试:
bool LinkedList::removeFirst(Node *node, int v) {
if(h==NULL)
return false;
if(h->value==v)
return true;
else {
bool result = findNum(h->next,v);
if(result == true){
Node *n = node;
free(n);
} else {
return false;
}
}
}
我知道我当前的解决方案将删除列表中的每个节点,但我想不出一种只删除递归实现中的第一个节点的方法。
【问题讨论】:
-
您是要删除列表的绝对第一个元素,还是第一次出现的值
v? -
另外,在函数
removeFirst的当前接口下,如果你最终删除了第一个元素,你将丢失你的列表,因为没有办法修改指向第一个元素的指针外部保存的列表元素。为此,您必须向我们展示LinkedList类的相关部分,或者修改函数以接受指向指针的指针或类似的东西。 -
哦,我刚刚意识到我的错误,该函数要求您删除具有值为 v 的实例的第一个节点。我的印象是您必须删除列表的绝对第一个元素。我知道从这里怎么走,谢谢你的帮助!
-
我的第二条评论仍然有效。您的函数签名有问题。你要么拿/还得太多,要么不够。
-
链表类有一个指向第一个节点的指针,称为“head”。因此,如果值为 v 的节点恰好是第一个元素,我将不得不将 head 重新分配给第二个元素以避免丢失列表?
标签: c++ class recursion linked-list