così mi sembra un pò più ordinato, cmq quoto quello detto da Stoicenko, ovvero di usare sempre un puntatore di appogio per scorrere la lista, apparte quando dovrai effettuare la free, ovvero la deallocazione della memoria!
ti posto il programma completo:
codice:
#include <stdlib.h>
#include <stdio.h>
typedef struct nod {
int data;
struct nod *next;
} node;
node *newnode(void)
{
return (node *)malloc(sizeof(node));
}
/* Dato un intero n>0, costruisce la lista di nodi da 1 ad n */
node* buildlis_n (int n)
{
node *p, *lis;
lis=NULL;
while (n>0) {
p=newnode();
p->data=n;
p->next=lis;
lis=p;
n--;
}
return(lis);
}
/* Stampa degli elementi di una lista */
void printlis(node *lis)
{
node* tmp;
tmp = lis;
printf("lista risultato\n");
while (tmp != NULL) {
printf(">>>> %d\n", tmp->data);
tmp = tmp->next;
}
}
void myFree ( node* top )
{
node* tmp;
tmp = top;
while ( top->next != NULL ) {
tmp = top->next;
free(top);
top = tmp;
}
}
int main()
{
node* head;
int n;
printf ("Inserire valore: ");
scanf ("%d", &n);
head = buildlis_n ( n );
printlis ( head );
myFree ( head );
system ("pause");
return 0;
}