Hola! el problema es q vos declaras un puntero "ultimo" pero no le reservas memoria, lo que estas haciendo es reservar memoria al siguiente de ultimo lo cual esta mal. Una pregunta ¿¿para que intentas reservar al siguiente?? no es mejor hacer:
void insertar_final(int x,L *lista)
{
L *ultimo;//otro puntero ahora hacia el ultimo nodo
ultimo
=(L
*)malloc(sizeof(L
));//le asigno memoria (creo nuevo nodo) ultimo->dato= x;//le asigno el elemento que queria
ultimo->sig=NULL;
}
De todas formas el error principal es q no estas enlazando la lista. Una forma de resolver es hacer:
case 1:
printf("Dame el dato que deseas insertar:\n"); lista=insertar_final(x,lista);
breaK;
...................
struct info * insertar_final(int x,L *lista)
{
L *ultimo;//otro puntero ahora hacia el ultimo nodo
ultimo
=(L
*)malloc(sizeof(L
));//le asigno memoria (creo nuevo nodo) ultimo->dato= x;//le asigno el elemento que queria
ultimo->sig=NULL;
if(lista==NULL) /* si la lista esta vacia */
return ultimo;
else {
while(lista->sig!=NULL) /* busco el ultimo nodo */
lista=lista->sig; /* cambio al siguiente nodo */
lista->sig=ultimo; /* el ultimo de la lista apunta al "ultimo" creado en esta funcion */
}
}
Solo es necesario retornar "ultimo" cuando la lista esta vacia. En el bucle lo que hice es buscar el ultimo nodo y enlazarlo al puntero "ultimo". No lo compile pero deberia funcionar
Saludos