c99 - 递归地对每个节点求和它之后的所有节点
问题描述
嗨,我需要做一个递归函数,该函数接受输入列表的头部,并将每个节点的所有节点加到该节点之后。例如,如果列表为 1->2->3,则列表将在 6->5->3 中修改。我做了一个很好的迭代函数,但我不知道如何做一个递归函数,你能帮忙吗?这是迭代的:
int modify(node *head){
node **curr;
node *track = head;
int i;
while (track->next != NULL){
*curr = (track)->next;
while((*curr)->next != NULL){
track->val += (*curr)->val;
*curr = (*curr)->next;
}
track = track->next;
}
track = head;
while (track->next != NULL){
printf("%d ",track->val);
track = track->next;
}
printf("\n");
return head->val;
}
解决方案
int modify(node *head){
if(!head) return 0;
head->val = modify(head->next)+head->val;
return head->val;
}
如果您也想打印这些值,则必须使用包装函数,因为递归以相反的顺序运行。
void wrapper(node* head){
modify(head);
while(head){
cout<<head->val<<" ";
head = head->next;
}
}
推荐阅读
- arrays - 使用数组将 XML 转换为 JSON
- python - 为什么 python 不接受我从文本文件中获取的颜色?Python Tkinter
- javascript - node.js中连接redis失败
- c++ - 错误:CreateProcess 错误=216 - Clion 2020.1.2
- html - 打开和关闭列表中的链接不起作用
- ruby-on-rails - Rails 中的 ArgumentError(错误数量的参数(给定 5,预期为 1))
- python - 删除pyplot中重叠的x轴标签
- c++ - 跨 DLL 边界访问虚拟方法是否安全/可能?
- javascript - 如何使用 axios 将对象数组发布到 PHP?
- rasa-nlu - 僧伽罗实体分类