perchè nella funzione che fai tu prima aggiungi 1, e poi richiami ricorsivamente sul nodo successivo, quando arriva alla fine, l == NULL mette *n = 0 e quindi perdi tutto.

In quella che ho fatto io fai prima la chiamata ricorsiva, quindi arrivi prima alla fine, pone *n = 0, e poi tornando indietro aggiunge man mano che cancella.

(Secondo me devi capire meglio come funziona la ricorsione)