#include <stdio.h>
struct elem
{ int valore;
struct elem * next;
};
void modifica(struct elem *l)
{
int prec, copia;
prec = l->valore;
do
{
l = l->next;
copia = l->valore;
l->valore = l->valore + prec;
prec = copia;
}
while (l->next);
}
struct elem* crea(int n)
{ /* funzione ausiliaria (non richiesta): crea una lista
con i valori n, n-1, ..., 2, 1 */
int i;
struct elem *l, *app;
app = (struct elem *) malloc(sizeof(struct elem));
app->next = NULL;
for (i = 1; i <= n; ++i)
{
app->valore = i;
l = app;
app = (struct elem *) malloc(sizeof(struct elem));
app->next = l;
}
39
free(app);
return l;
}
void stampa(struct elem *l)
{/* funzione ausiliaria (non richiesta): stampa una lista */
while (l != NULL)
{
printf("%d ",l->valore);
l=l->next;
}
printf("\n");
}
main()
{/* programma principale */
int i;
struct elem *p;
p = crea(10);
stampa(p);
modifica(p);
stampa(p);
modifica2(p);
stampa(p);
modifica(p);
stampa(p);
}
Prodotto inverso
Il programma Prodotto inverso permette di fare con una lista contenente almeno due elementi e con l'utilizzo dei puntatori una lista modificata memorizzando nell’ultimo nodo il prodotto del penultimo ed ultimo nodo, nel penultimo il prodotto del terzultimo e del penultimo e così via. Il primo record non viene modificato.
Ad esempio, una lista contenente la sequenza di interi 9 7 6 3 2 la soluzione di questa lista sarà: 9 63 42 18 6