以递归方式从链表中删除节点

时间:2017-08-16 04:12:14

标签: c++ recursion linked-list

给定链表和指定的数据值,我想以递归方式删除具有所述数据的所有节点。 (我已经想出了如何迭代地完成它,但我想这样做)。我已将结构定义为:

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);
  }
}

但这不起作用。看起来我的助手功能实际上并不起作用,但我无法弄明白。出了什么问题?

1 个答案:

答案 0 :(得分:0)

你可能想要:

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);
}