Scusate non sono molto esperta in programmazione...
perchè la funzione stampaLista stampa solo l'ultimo valore inserito?

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

typedef struct nodo *lista;
typedef struct nodo{
int val;
lista next;
}nodo;

lista leggiLista(void);
void stampaLista(lista L);

int main (void)
{
lista lis;
lis=leggiLista();
stampaLista(lis);
return 0;
}

lista leggiLista (void)
{
int v;
lista N,L=NULL;
while (1)
{
printf("insersci prossimo valore: ");
scanf("%d",&v);
if (v==0) break;
N=(nodo*)malloc(sizeof(nodo));
if(!N){
printf("non c'è spazio: \n");
break;
}
N->val=v;
N->next=L;
L=N;
}
return L;
}


void stampaLista(lista L)
{
while(L != NULL)
{
printf("\n%3d",L->val);
L=L->next;
scanf("%d");
}
}