首页 > 解决方案 > 递归地对每个节点求和它之后的所有节点

问题描述

嗨,我需要做一个递归函数,该函数接受输入列表的头部,并将每个节点的所有节点加到该节点之后。例如,如果列表为 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;

}

标签: c99

解决方案


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;
    }
}

推荐阅读