给定一个链表和一个指定的数据值,我想递归地删除包含所述数据的所有节点。(我已经找到了迭代的方法,但我想这样做)。我已将我的结构定义为:
struct Node{
int data;
Node *next;
};
struct LinkedList{
Node *head;
};
为了删除,我做了这个助手函数,它(应该)返回指向我删除列表的头节点的指针:
Node* deleteNodeRecursivelyHelper(Node *head, int value){
if (head==NULL){
return 0;
}
if (head->data==value){
head=head->next;
deleteNodeRecursivelyHelper(head,value);
return 0;
} else{
Node *x=head;
deleteNodeRecursivelyHelper(head->next,value);
return x;
}
}
然后我想在我的实际列表中使用它:
void deleteNodeRecursively(LinkedList* list, int value){
if (list->head==NULL){
return;
} else if (list->head->data==value){
list->head=list->head->next;
deleteNodeRecursively(list,value);
} else{
deleteNodeRecursivelyHelper(list->head->next,value);
}
}
但这不起作用。看起来我的助手函数实际上不起作用,但我无法理解。出什么事了?
你可能想要:
Node* deleteNodeRecursivelyHelper(Node* head, int value){
if (head == nullptr) {
return nullptr;
}
if (head->data == value) {
auto next = head->next;
delete head; // I assume that you allocate node.
return deleteNodeRecursivelyHelper(next, value);
} else {
head->next = deleteNodeRecursivelyHelper(head->next, value);
return head;
}
}
void deleteNodeRecursively(LinkedList* list, int value){
list->head = deleteNodeRecursivelyHelper(list->head, value);
}
我有一个链表定义为 我希望递归地遍历我的链表,删除具有指定数据类型的节点(并正确地重新加入节点)。我找到了迭代的方法,但我一直在努力递归。到目前为止,我得到的是: 基本上,我的策略是确定头部是否有数据。如果是这样,我就用下一个节点替换头部。问题是else语句,我知道我必须“移动”到下一个节点。我不仅要转到下一个节点,还要确保它是LinkedList格式的,这样我才能正确使用头部。我不知道如何在不删
所以我有一个链接列表,我希望能够删除一个数字的第一次出现, 我正在尝试使用递归,但不幸的是,我最终只能删除列表的头部 我有三个不同的类,一个用于末尾的空列表,另一个类声明这个方法和实际的列表。
我正在学习数据结构,并试图理解Java中的链接列表。我的问题是,我有麻烦与删除节点在给定的索引递归。我的目标是得到O(log n),而不是使用循环,最后得到O(n)。 因此,当我试图删除索引2的条目时,它会删除该索引之前的所有数字,但不会删除该索引-因此它会删除[0]和[1],但不会删除[2]。 例如,在此代码中,删除前的数组填充为:。调用后,它有以下条目: 我只想删除13,这样数组就会像这样:
几个月前我学习了递归,现在这一切都很混乱。有一个人可以解释我整个功能是如何正常工作的,但我有点明白它是如何工作的,但我认为有些步骤在我的脑海中并不是很清楚。病人的Thx提前。
我试图从基于阉羊的双链表中删除一个元素,该列表中的节点满足返回bool的函数。由于某种原因,替换节点的前一个指针(下一个被删除)不更新,而是引用回它自己。 我的代码 测试结果
我的问题是,如果用户输入一个姓氏,并且在链接列表中有多个相同的姓氏,并且其中一个姓氏在head节点中。如何在不删除头部节点的情况下删除另一个姓氏。我尝试了一些我能想到的方法,但是删除了所需的节点(这很好),包括头部节点(这不是我想要的…)