Vos mismo lo dijiste es casi igual, pero no lo es... Fijate en el if de insertar_final() pregunto si lista es NULL(lista vacia), si es verdadero retorno la estructura creada. (ademas t falta un else
)
Si vos pasas de esta manera el puntero:
insertar_final(i,lista); // llamada a la funcion
cuando lista regrese al main no va a hacer ningun cambio, esto es porque el puntero se paso por valor. Podes hacer dos cosas: retornar una estructura como lo hic antes o pasar el puntero por referencia, ¿como? pasando la direccion del puntero
insertar_final(i,&lista); // paso la direccion
......................
void insertar_final(int i,L **lista)
{
L *ultimo;
ultimo= nuevo_nodo(i);
if(*lista==NULL) /* lista vacia */
*lista=ultimo;
else {
L *aux=*lista; /* creo un puntero auxiliar para q me recorra la lista */
while(aux->sig!=NULL) /* recorro la lista */
aux=aux->sig; /* cambia al siguiente nodo */
aux->sig=ultimo; /* el ultimo de la lista apunta a "ultimo" creado aca
}
}
Fijate que creo un puntero auxiliar para recorrer la lista; esto es porque si vos usas el puntero lista vas a perder la referencia al primer nodo lo cual no es bueno... Cualquier duda segui pregutando
Saludos