l=l->succ;

Se l è il nodo radice della tua lista, non dovresti mai modificarlo. Nel tuo codice, alla fine del ciclo while l sarà uguale, se hai costruito bene la lista, a null (il succ dell'ultimo elemento)
usa una variabile di appoggio per il while, tipo

nodo* tmp_l = l;