给定链表和指定的数据值,我想以递归方式删除具有所述数据的所有节点。 (我已经想出了如何迭代地完成它,但我想这样做)。我已将结构定义为:
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);
}
}
但这不起作用。看起来我的助手功能实际上并不起作用,但我无法弄明白。出了什么问题?
答案 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);
}