当前位置: 首页 > 知识库问答 >
问题:

递归删除具有指定数据的链表

訾俊名
2023-03-14

我想递归地删除一个链表。我想到了如何迭代地做到这一点,但我对如何做到这一点很好奇。到目前为止我有:

void deleteNodeRecursively(LinkedList *list, int value){
  Node *curr=list->head;
  if (list->head==NULL){
    return;
  }

  else if (list->head->data==value){
    Node *x=list->head->next;
    delete list->head;
    list->head=x;
  }
   else{
    LinkedList *newlist;
    newlist->head=list->head->next;
    deleteNodeRecursively(newlist,value);
  }
}

我定义的地方

struct LinkedList{
   Node *head;
};

struct Node{
   int data;
   Node *next;
};

如果需要,我可以去掉头部,但我不知道如何去掉身体或尾巴,然后正确地缝合列表,更不用说递归地做了。我该如何进行?为什么这样不行?

编辑:删除问号并替换为我认为可行的代码。

共有1个答案

罗绪
2023-03-14

假设你的节点数据有一个“正确的”构造函数和析构函数。

您必须跟踪删除地址,为此您可以传递双指针或对指针的引用。

void deleteNodeRecursively(Node** list, int value){
//                             ^^^ double pointer to track address withing recursive call
  Node *curr= *list ; 
  if (curr ==NULL){ // Base case for recursion 
    return;
  }

  else if ( curr->data==value){ // If node to be deleted is found
    *list = curr->next; // Update the address for recursive calls
    delete curr; // Delete this current "got" node
  }

 // Else simple recurse into 
  deleteNodeRecursively( &(*list)->next, value );
}

注意:此实现将删除数据与值匹配的所有节点。

 类似资料:
  • 我有一个链表定义为 我希望递归地遍历我的链表,删除具有指定数据类型的节点(并正确地重新加入节点)。我找到了迭代的方法,但我一直在努力递归。到目前为止,我得到的是: 基本上,我的策略是确定头部是否有数据。如果是这样,我就用下一个节点替换头部。问题是else语句,我知道我必须“移动”到下一个节点。我不仅要转到下一个节点,还要确保它是LinkedList格式的,这样我才能正确使用头部。我不知道如何在不删

  • 我正在学习数据结构,并试图理解Java中的链接列表。我的问题是,我有麻烦与删除节点在给定的索引递归。我的目标是得到O(log n),而不是使用循环,最后得到O(n)。 因此,当我试图删除索引2的条目时,它会删除该索引之前的所有数字,但不会删除该索引-因此它会删除[0]和[1],但不会删除[2]。 例如,在此代码中,删除前的数组填充为:。调用后,它有以下条目: 我只想删除13,这样数组就会像这样:

  • 给定一个链表和一个指定的数据值,我想递归地删除包含所述数据的所有节点。(我已经找到了迭代的方法,但我想这样做)。我已将我的结构定义为: 为了删除,我做了这个助手函数,它(应该)返回指向我删除列表的头节点的指针: 然后我想在我的实际列表中使用它: 但这不起作用。看起来我的助手函数实际上不起作用,但我无法理解。出什么事了?

  • 本文向大家介绍python递归删除指定目录及其所有内容的方法,包括了python递归删除指定目录及其所有内容的方法的使用技巧和注意事项,需要的朋友参考一下 实例如下: 以上这篇python递归删除指定目录及其所有内容的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 本文向大家介绍php递归删除指定文件夹的方法小结,包括了php递归删除指定文件夹的方法小结的使用技巧和注意事项,需要的朋友参考一下 本文实例总结了两种php递归删除指定文件夹的方法。分享给大家供大家参考。具体如下: 方法一: 方法二: 希望本文所述对大家的php程序设计有所帮助。

  • 我需要返回带有删除的所有重复元素的链表的头部。我理解这个问题的逻辑,但我在使用递归时变得困惑。 如果我在If条件之前调用函数RemoveDuplicates(head.next);很好用。但是,如果我交换语句的顺序(rest所有内容都完全相同),如下所示: 代码无法正确解决像'1->1->1->1'这样的测试用例。在后一种情况下,我得到的输出是'1->1'。 我真的想要一些关于我如何更好地理解递归