对每个节点递归求和它之后的所有节点
Sum recursively to each node all the nodes that come after it
你好,我需要做一个递归函数,它接受输入列表的头部并将每个节点和该节点之后的所有节点相加。例如,如果列表是 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;
}
}
你好,我需要做一个递归函数,它接受输入列表的头部并将每个节点和该节点之后的所有节点相加。例如,如果列表是 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;
}
}