jueves, 2 de julio de 2015

Invertir lista de caracteres

20.9 Escriba un programa para crear un objeto lista enlazada de 10 caracteres, y que luego cree un segundo objeto lista que contenga una copia de la primera lista, pero en orden inverso.

#include <iostream>
using namespace std;

struct nodo
{
       char info;
       struct nodo *sig;
};

void generarLista(nodo **inicio)
{
     nodo *q , *fin;
     for(int i=0;i<5;i++)
     {
             q = new nodo;
             q->info = (char)(rand()%10+70);
             
             if(*inicio == NULL)
             {
                  q->sig = *inicio;
                  *inicio = q;
                  fin = q;
             }
             else
             {
                 q->sig = fin->sig;
                 fin->sig = q;
                 fin = q;
             }
     }
}
nodo *obtenerFin( nodo *inicio)
{
     while( inicio->sig != NULL )
         inicio=inicio->sig;
     
     return inicio;
}


nodo *EliminarFin( nodo *inicio )
{
     nodo *fin , *aux;
     fin = obtenerFin(inicio);
     aux=inicio;
     
     while( aux->sig != fin )
         aux=aux->sig;
     
     aux->sig= fin->sig;
     
     
     delete fin;
     
     return inicio;
}  

nodo *InsertarFinal( nodo *inicio ,nodo *fin, char nom)
{
     nodo *q ;
     q = new nodo;
     q->info = nom;
     
     
     if(fin==NULL)
     {
         q->sig = inicio;
         inicio  = q;
         fin     = q;        
     }
     else
     {
         q->sig   = fin->sig;
         fin->sig = q;
         fin       = q;
     }
     return inicio;
}    

void mostrar(nodo *inicio)
{
     while(inicio)
     {
          cout<<inicio->info<<"  ";
          inicio = inicio->sig;
     }
     cout<<"\n\n\n";
}

int main()
{
    nodo *inicio , *inicio2 , *fin2;
    inicio  = NULL;
    inicio2 = NULL;
    fin2 = NULL;
    generarLista(&inicio);
    mostrar(inicio);
    
    inicio2 = InsertarFinal(inicio2 ,fin2 , obtenerFin(inicio)->info);
    inicio  = EliminarFin(inicio);
    inicio2 = InsertarFinal(inicio2 ,obtenerFin(inicio2) , obtenerFin(inicio)->info);
    inicio  = EliminarFin(inicio);
    inicio2 = InsertarFinal(inicio2 ,obtenerFin(inicio2) , obtenerFin(inicio)->info);
    inicio  = EliminarFin(inicio);
    inicio2 = InsertarFinal(inicio2 ,obtenerFin(inicio2) , obtenerFin(inicio)->info);
    inicio  = EliminarFin(inicio);
    inicio2 = InsertarFinal(inicio2 ,obtenerFin(inicio2) , obtenerFin(inicio)->info);
    
    mostrar(inicio2);
    
    system("pause");
    return 0;
}


No hay comentarios.:

Publicar un comentario