Salve, ho un problema con la stampa di una lista.

Ho questo codice per la struttura di una lista:
codice:
struct SNode{
	int info;
	struct SNode *link;


};
typedef struct SNode TNode;
typedef TNode *TList;
Queste invece sono le funzioni:
codice:
TNode *crea_nodo(int info);
void distruggiNodo(TNode *n);
TList crea_lista();
TList distruggi_lista(TList n);
void stampaLista(TList L);
TList inserisciNodo(TList l, int info);


int main(){
	int i, num;


	TList l=crea_lista();


	for(i=0;i<3;i++){
		printf("insrisci valor: ");
		scanf("%d", &num);
		inserisciNodo(l, num);
	}
	stampaLista(l);
	distruggi_lista(l);




	return 0;
}


TNode *crea_nodo(int info){
	TNode *n;
	n=(TNode *)malloc(sizeof(TNode)*1);
	n->info = info;
	n->link = NULL;
	return n;
}


void distruggiNodo(TNode *n){
	free(n);
}


TList crea_lista(){
	return NULL;
}


TList distruggi_lista(TList l){
	TNode *n;
	TNode *m;
	n=l;
	while(n!=NULL){
		m=n->link;
		distruggiNodo(n);
		n=m;
	}
	return NULL;


}


void stampaLista(TList L){
	TNode *n;
	n=L;
	while(n!=NULL){
		printf("%d ", n->info);
		n=n->link;
	}
}


TList inserisciNodo(TList l, int info){
	TNode *p, *s, *n;
	p=NULL;
	s=l;
	//F1 RICERCA POSIZIONE
	while(s!=NULL && info>s->info){
		p=s;
		s=s->link;
	}
	//F2 ALLOCAZIONE
	n=crea_nodo(info);


	if(p==NULL){
		n->link=l;
		return n;
	}else{
		n->link = s;
		p->link = n;
		return l;
	}
}
La lista risulta NULL anche dopo l'inserimento dei nodi. Come devo fare?