Una lista Doblemente Ligada con una lista ligada cuando un numero se repite

Iniciado por Gatoloco123, 20 Octubre 2017, 03:36 AM

0 Miembros y 1 Visitante están viendo este tema.

Gatoloco123

Hola necesito ayuda..
Como hago que los datos de una lista doble se pase el numero que se repita a la de la  lista soy un novato y los punteros me cuesta un buen de trabajo.Es lo unico que necesito para terminar .
El codigo guarda los numeros por ejemplo  {6,7,2,7,-1,9,7,3} y cuando el numero de repita tiene que salir NULL <-> 6<-> 7->7->7 <->2<->-1<->9<->3 <-> NULL los <-> son de la doble ligada y el -> es de la lista donde esta el numero que se repite . El codigo mete numeros hasta que metas 0 en la opcion 1 y la opcion 2 muestra la lista y en la opcion 3 es el metodo de la burbuja.



#include <stdio.h>
#include <stdlib.h>

typedef struct nodo
{
int dato;
struct nodo *siguiente;
struct nodo *anterior;
}nodo;

nodo *primero = NULL;
nodo *ultimo = NULL;
void insertarNum();
void MostrarNum();
void MostrarNum2();
void OrdenarNum();

int main()
{
int opcionSeleccionada;
while(opcionSeleccionada !=5)
{
printf("\n Lista doblemente ligada");
printf("\n 1.- Insertar  |4.- Salir");
printf("\n 2.- Mostrar lista");
printf("\n 3.- Ordenar");
printf("\n \n");
scanf("%d", &opcionSeleccionada);
switch(opcionSeleccionada)
{
case 1:
                               system("clear");
printf("\n\n Insertar Numero. \n\n");
insertarNum();
break;
case 2:
                               system("clear");
printf("\n\n Mostrar lista de Numero. \n\n");
MostrarNum();
break;
case 3:
                               system("clear");
printf("\n\n Ordenar Numero.\n\n");
OrdenarNum();
break;
case 4:
printf("\n\n Salir \n\n");
break;
default:
printf("\n\n Opcion invalida. \n\n");
}
}
return 0;
}

void insertarNum()
{
    int i=0,a=1;
for(i=0;i<a;i++)
   {
   nodo *nuevo = (nodo*) malloc(sizeof(nodo));
   printf("Ingrese el dato del nodo:");
scanf("%d", &nuevo->dato);
if(nuevo->dato== 0)
   {
     break;
}
if(primero == NULL)
{
primero = nuevo;
primero->siguiente = NULL;
primero->anterior = NULL;
ultimo = primero;
}
else
{
ultimo->siguiente = nuevo;
nuevo->siguiente = NULL;
nuevo->anterior = ultimo;
ultimo = nuevo;
}
a++;
   }
}
void MostrarNum()
{
nodo *nodoActual = (nodo*) malloc(sizeof(nodo));
nodoActual = primero;
if(primero!=NULL)
{
printf("Impresion normal: NULL ");
while(nodoActual!=NULL)
{
printf("<-> %d ", nodoActual->dato);
nodoActual = nodoActual->siguiente;
}
printf("<-> NULL \n");
}
else
{
printf("\nLista vacia.\n");
}
}
void OrdenarNum()
{
 nodo *nodoActual = (nodo*) malloc(sizeof(nodo));
 nodo *nodoSig = (nodo*) malloc(sizeof(nodo));
 int aux = 0;
nodoActual = primero;
       nodoSig = nodoActual->siguiente;
if(primero != NULL)
{
                while(nodoSig != NULL)
                {
                    if(nodoActual->dato > nodoSig->dato)
                    {
                    printf("nodoActual -> %d\n",nodoActual->dato);
                    printf("nodoSig -> %d\n",nodoSig->dato);
                    aux = nodoActual->dato;
                    nodoActual->dato = nodoSig->dato;
                    nodoSig->dato = aux;
                    printf("Aux-> %d\n",aux);
                    }
                    nodoActual = nodoActual->siguiente;
                    nodoSig = nodoSig->siguiente;
                }
                nodoActual = nodoActual->siguiente;
           MostrarNum2();
}
else
{
printf("\nLista vacia.\n");
}
}
void MostrarNum2()
{
nodo *nodoActual = (nodo*) malloc(sizeof(nodo));
nodoActual = primero;
if(primero!=NULL)
{
printf("\n Impresion Burbuja:\n NULL ");
while(nodoActual!=NULL)
{
printf("<-> %d ", nodoActual->dato);
nodoActual = nodoActual->siguiente;
}
printf("<-> NULL \n");
}
else
{
printf("\nLista vacia.\n");
}
}