Ejercicios : Realizar comprobación de si un número es capicúa utilizando listas de enlace doble

La práctica o ejercicio con solución que se propone es realizar una lista utilizando reserva de memoria dinámica con doble puntero cada elemento de la lista, utilizando también dos punteros que indican el principio y final de lista. Una vez creada la lista con los dígitos del número tecleado por el usuario, el ejercicio con solución ha de comprobar si el número es capicúa o no.



La solución de los ejercicios que se plantean es la siguiente:

// Librerias a incluir en el programa

#include <stdio.h>

#include <stdlib.h>

// Estructura que contendrá los dígitos del numero

typedef struct Nodo {

        int Numero;

        struct Nodo *siguiente;

        struct Nodo *anterior;

} Elemento;

// Funcion principal

int main(int argc, char *argv[])

{

    // Variables a utilizar

    Elemento *Nuevo = NULL; // variable que servirá para crear un nuevo elemento

    Elemento *Inicio = NULL; // variable que apunta al primer elemento

    Elemento *Final = NULL; // variable que apunta al ultimo elemento

    Elemento *Recorrer = NULL;

    Elemento *RecorrerIz = NULL;

    Elemento *RecorrerDc = NULL;

    int Chequeo = 0;

    long int NumeroSolicitar=0;

    int digito = 0;

    // Se solicita un numero por pantalla para comprobar si

    // es capicua o no

    printf("\nTeclee No.: ");

    scanf(" %ld",&NumeroSolicitar);

    while(NumeroSolicitar>9) {

      digito = NumeroSolicitar % 10;

      // Crear nodos en la lista e insertarlos

      Nuevo = (Elemento *)malloc(sizeof(Elemento));

      Nuevo->siguiente = NULL;

      Nuevo->anterior = NULL;

      Nuevo->Numero = digito;

         if( Inicio == NULL ) {

             Inicio = Nuevo;

         } else {

           Nuevo->anterior = Final;

           Nuevo->anterior->siguiente = Nuevo;

         }

         Final = Nuevo;

         NumeroSolicitar=NumeroSolicitar/10;

    }

    // Insertar el ultimo digito en la lista

    Nuevo = (Elemento *)malloc(sizeof(Elemento));

    Nuevo->siguiente = NULL;

    Nuevo->anterior = NULL;

    Nuevo->Numero = NumeroSolicitar;

    if( Inicio == NULL ) {

        Inicio = Nuevo;

    } else {

       Nuevo->anterior = Final;

       Nuevo->anterior->siguiente = Nuevo;

    }

    Final = Nuevo;

    // Realizar un listado de los caracteres introducidos

    Recorrer = Inicio;

    while(Recorrer!=NULL) {

       printf("\n%ld",Recorrer->Numero);

       Recorrer = Recorrer->siguiente;

    }

    // Comprobar si el numero es capicúa

    RecorrerIz = Inicio;

    RecorrerDc = Final;

    Chequeo = 0;

    while(RecorrerIz!=RecorrerDc && Chequeo==0) {

     if(RecorrerIz->Numero!=RecorrerDc->Numero) {

       Chequeo = 1;

     }

     RecorrerIz=RecorrerIz->siguiente;

     RecorrerDc=RecorrerDc->anterior;

    }

    // Visualizar si el numero es capicua o no

    if(Chequeo==0) {

      printf("\nEl numero es capicua\n");

    } else {

      printf("\nEl numero no es capicua\n");

    }

    // Se ha de tener en cuenta que no se realiza la liberación

    // de los nodos insertados en la memoria.

  system("PAUSE");

  return 0;

}

El resultado del ejercicio y práctica de programación en lenguaje c, ha de ser similar al que se muestra a continuación.

Prácticas en C, número capicúa con listas de enlace doble.

Prácticas en C, número capicúa con listas de enlace doble.

Gracias por vuestra visita y un saludo!!!