Andrea Quaglia ha scritto:
Se non metti il valore di ritorno di listaSomma in una variabile e la stampi (o lo stampi direttamente), difficilmente vedrai il risultato.
#include <stdio.h>
#include <stdlib.h>
struct lista
{ int key;
struct lista *next;
};
struct lista *aggiungi(struct lista *top, struct lista *nuovo);
struct lista *nuovo();
void stampa(struct lista *top);
struct lista *dealloca(struct lista *top);
int listaSomma(struct lista *l);
int main()
{ int n;
struct lista *top;
printf("Inserisci il numero di elementi che la lista contiene: ");
scanf("%d", &n);
printf("Inserisci gli elementi: ");
for ( ; n>0; n--)
top = aggiungi(top, nuovo());
printf("%d", listaSomma(n));
top = dealloca(top);
return 0;
}
struct lista *aggiungi(struct lista *top, struct lista *nuovo)
{ if (top==NULL)
{ nuovo->next = top;
return nuovo;
}
top->next = aggiungi(top->next, nuovo);
return top;
}
struct lista *nuovo()
{ struct lista *nuovo = (struct lista *)malloc(sizeof(struct lista));
scanf("%d", &nuovo->key);
return nuovo;
}
void stampa(struct lista *top)
{ if (top!=NULL)
{ printf("%d --> ", top->key);
stampa(top->next);
}
else printf("NULL\n\n");
return;
}
struct lista *dealloca(struct lista *top)
{ if(top!=NULL)
{ dealloca(top->next);
free(top);
}
return NULL;
}
int listaSomma(struct lista *l)
{
if(!l)
return 0;
else
return l->key + listaSomma(l->next);
}
tipo cosi?