L'esame è il 15...può andar bene questa soluzione:

codice:
/* La funzione Agg(), modifica i valori del campo val degli elementi della lista
   L in modo tale che il valore del campo val di un elemento m sia pari alla
   somma dei (vecchi) valori dei campi val dell'elemento m e degli elementi
   successivi che sono interi dispari.
   Esempio: se la sequenza dei valori dei campi val della lista era:2,5,8,3,2,4
   allora l funzione la modifica così: 10,8,11,3,2,4. */

#include <stdio.h>
#include <stdlib.h>

typedef struct Elem{
    long val;
    struct Elem *next;
} Elem, *List;    

void Agg(List L){
    
    /* Dichiaro il puntatore al nodo corrente e lo setto al primo nodo */
    List corrente = L; 
    
    while(corrente != NULL){    // Finchè non raggiunge la fine della lista
        L->val += Som(L->next);
        L = L->next;        // Passa al prossimo nodo
    }
}


/* La funzione Som() riceve l'indirizzo del nodo successivo al nodo corrente e
   calcola la somma di tutti gli elementi aventi campo val dispari per poi
   restituire il risultato alla funzione Agg() */
   
long Som(List L){
    
    long somma = 0;
    
    if(L == 0)    return 0;   // Se non ci sono altri elementi la somma è 0
    
    else{
        while(L->next != NULL){
            if(L->val%2==1) // Se il campo val del nodo puntato da L è dispari
                 somma += L->val;
            
            L = L->next;    // Passa al prossimo nodo
        }
    return somma;            // Ritorna ad Agg il valore della somma
    }
}
Grazie
Andrea