Lo que el programa no hace bien esque solo entra una vez en el primer bucle while(resaltado en rojo), y el caso esque la lista no esta vacia, porque introduzco varios numeros y si la muestro por pantalla los numeros si que estan y no apunta a NULL.
Si alguno encuentra el error se lo agradecere mucho, porque me esta sacando loco este programa. Gracias
Código:
#include <stdio.h> #include <stdlib.h> struct elemento { int dato; struct elemento * sig; }; void crear(struct elemento **lista); void InsertaOrdenada(struct elemento **lista, int elemento); void MuestraOrdenada(struct elemento *lista); void JuntarListas(struct elemento **listaU, struct elemento **list1, struct elemento **list2); int BuscarElemento(struct elemento **lista, int elemento); main() { int opcion,x; struct elemento *lista1, *lista2, *lista_unida; crear(&lista1); crear(&lista2); crear(&lista_unida); do{ printf("\n\nMENU OPCIONES LISTA ENLAZADA SIMPLE"); printf("\n___________________________________________"); printf("\n\n 1.-Insertar elemento en la lista 1"); printf("\n 2.-Insertar elemento en la lista 2"); printf("\n 3.-Unir listas."); printf("\n 4.-Listar elementos\n"); printf("\n 0.-SALIR\n"); printf("\nIntroduce la opcion: "); scanf("%d",&opcion); switch(opcion) { case 1: printf("Introduce el elemento que quieras introducir en la lista 1: "); scanf("%d",&x); InsertaOrdenada(&lista1, x); system("cls"); break; case 2: printf("Introduce el elemento que quieras introducir en la lista 2: "); scanf("%d",&x); InsertaOrdenada(&lista2, x); system("cls"); break; case 3: system("cls"); printf("Uniendo listas....\n\n"); JuntarListas(&lista_unida,&lista1,&lista2); MuestraOrdenada(lista_unida); case 4: system("cls"); MuestraOrdenada(lista1); MuestraOrdenada(lista2); break; } } while(opcion!=0); system("pause"); } void crear(struct elemento **lista) { *lista=NULL; } void InsertaOrdenada(struct elemento **lista, int elemento) { struct elemento *aux,*ant,*nuevo; nuevo=(struct elemento*)malloc(sizeof(struct elemento)); nuevo->dato=elemento; fflush(stdin); nuevo->sig=NULL; aux=(*lista); ant=(*lista); if(aux==NULL || aux->dato > nuevo->dato) { nuevo->sig=aux; (*lista)=nuevo; } else { while(aux!=NULL && aux->dato < nuevo->dato) { ant=aux; aux=aux->sig; } nuevo->sig=aux; ant->sig=nuevo; } } void JuntarListas(struct elemento **listaU, struct elemento **list1, struct elemento **list2) { struct elemento *aux,*ant2,*aux2; aux=(*list1); aux2=(*listaU); ant2=(*listaU); while(aux!=NULL) { if(aux2==NULL) { aux->sig=aux2; (*listaU)=aux; } else { while(aux2!=NULL) { ant2=aux2; aux2=aux2->sig; } aux->sig=aux2; ant2->sig=aux; } aux=aux->sig; } MuestraOrdenada(*listaU); aux=(*list2); while(aux!=NULL) { aux2=(*listaU); ant2=(*listaU); if(aux2==NULL || aux2->dato > aux->dato) { aux->sig=aux2; (*listaU)=aux; } else { while(aux2!=NULL && aux2->dato < aux->dato) { ant2=aux2; aux2=aux2->sig; } aux->sig=aux2; ant2->sig=aux; } aux=aux->sig; } } void MuestraOrdenada(struct elemento *lista) { struct elemento *aux; int i=1; if(lista==NULL) { printf("No se ha encontrado ningun elemento en la lista\n\n"); } else { aux=lista; while(aux) { printf("\nElemento %d: %d",i,aux->dato); aux=aux->sig; i++; } printf("\n\n"); } }