大家新年快乐! :)
我可以在一年的第一天做更好的事情,但我正在尝试一起实现链接列表和递归。
我只是想到如何编写一个函数来计算递归链表中的偶数。
void List:: findingEvens(Node* n, Node*& newHead){
if(n == NULL)
return;
else
if(n-> data % 2 != 0)
findingEvens(n-> next);
else{
if(!newHead){
newHead = n;
}
else{
Node* temp =head;
for(;temp->next;temp=temp->next){
temp = temp -> next;
}
temp-> next = n;
findingEvents(n-> next);
}
}
}
问题是在我的课程中我添加了以下内容,因为它应该是
void findingEvens(Node* n);
然而,这使我误认为错误:'Node'尚未声明 实际上我在h类中定义了这个函数后有一个Node结构。
递归函数的实现是错误的吗? 任何帮助将不胜感激,再次新年快乐:)
答案 0 :(得分:0)
void List:: findingEvens(Node* n, Node*& newHead){
if(n == NULL)
return;
else
if(n-> data % 2 != 0)
findingEvens(n-> next, newHead);
else{
// Push even node onto newHead list
newNode = new Node;
newNode->data = n->data;
newNode->next = newHead;
newHead = newNode;
findingEvens(n-> next, newHead);
}
}
您需要在递归调用中传递newHead
。
您不能直接将n
分配给newHead
,因为newHead
列表将包含原始列表中的所有链接。您需要创建新节点并复制数据。
上述代码以原始列表的相反顺序构建结果列表,例如如果您从1, 2, 3, 5, 6, 8, 9
开始,则结果为8, 6, 2
。你可以在完成后反转清单。