给定一个链表和一个指定的数据值,我想递归地删除所有具有所述数据的节点。(我已经想出了如何迭代地做到这一点,但我想这样做(。我将结构定义为:
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);
}