Привет! Мне нужно реализовать рекурсивную функцию, взятую на вход заголовка списка, суммировать для каждого узла все узлы, которые следуют после. (если список 1-> 2-> 3, он должен стать 6-> 5-> 3), а затем суммировать все узлы вместе, например, переменная k
становится 6 + 5 + 3, поэтому k=14
. Я не могу это реализовать, можете ли вы показать мне, как я могу это сделать? THX
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int val;
struct node *next;
} node_t;
void somma(node_t *head, int *sum);
int recursive(node_t *head, int *sum);
int main (){
int max, i, sum=0, sum2=0;
node_t *head = NULL;
head = (node_t *)malloc(sizeof(node_t));
node_t *temp = head;
printf("Quanti valori vuoi inserire: \n");
scanf("%d", &max);
for (i=0; i < max; i++){
temp->next = (node_t *)malloc(sizeof(node_t));
printf("Inserisci il valore in posizione %d\n", i);
scanf("%d", &temp->val);
temp = temp->next;
temp->next = NULL;
}
somma(head, &sum);
printf("La somma e' %d\n", sum);
recursive(head, &sum2);
printf("La somma calcolata rec e': %d\n", sum2);
return 0;
}
void somma(node_t *head, int *sum){
node_t *curr = head;
node_t *start = head;
while(start->next != NULL){
while (curr->next != NULL){
curr = curr->next;
start->val += curr->val;
}
start = start->next;
curr = start;
}
start = head;
while (start->next != NULL){
(*sum) += start->val;
start = start->next;
}
return ;
}