Ecco il listato:
/* Crea un lista che in ogni posizione i ha
* la somma di tutti gli elementi della lista
* passata come parametro dalla posizione i all'ultima
*/
lista totali_parziali(lista l)
{
if (l != NULL)
{
// Intero per la memorizzazione della somma
int k = 0;
// Puntatore d'appoggio per lo scorrimento di l per sommare gli elementi
lista p = l;
// Lista da ritornare
lista l2;
// Scorrimento di l per sommare gli elementi
while (p != NULL)
{
k += p->x;
p = p->next;
}
// Assegnamento di l2
l2 = (lista)malloc(sizeof(struct nodo));
l2->x = k;
l2->next = totali_parziali(l->next); // Ricorsione
return l2;
}
else
// Fine lista l segna la fine anche di l2
return NULL;
}
Se ti serve una cosa con una complessitā minore ti conviene seguire il suggerimento dato. Se ti serve ancora una mano fammi sapere!