Un altra cosa: Tu passi un puntatore di puntatore (list *l) ed ad ogni ciclo vai a modificare il valore *l finchè non è null. Dato che è un puntatore vai a modificare direttamente l1 (a cui fai riferimento con *l) nel main. Di conseguenza l1 varrà null dopo l'esecuzione della buld_list()