Invertir el orden de Datos en una Lista Enlazada Simple - C++

Programa desaroollado en el lenguaje C++, con la finalidad de una vez creada la lista enlazada, unado este trozo de codigo, podamos invertirla es decir el primer dato que se encuentra en la cabecera de la lista pasara a ser la ultima y el dato que esta al final sera la nueva cabecera.

#include "conio.h"
#include "iostream.h"
#include "string.h"
class nodo
{
    public:
       nodo *sig;
       char inf[5];
    public:
      nodo *inserta(nodo *p);
      nodo *invertir(nodo *p);
      void recorre(nodo *p);
};
void main()
{
char op;
nodo *p=NULL;
    do
    {
       clrscr();
       cout<<"\t\t1.- cargar lista\n";
       cout<<"\t\t2.- invertir lista\n";
       cout<<"\t\t3.- recorrer";
       op=getch();
       switch(op)
       {
            case '1': p=p->inserta(p);
                     break;
            case '2': p=p->invertir(p);
                     break;
            case '3': p->recorre(p);
                     break;
       }
    }while(op!=27);
}
nodo *nodo::inserta(nodo *p)
{
char op;
nodo *q, *r;
   do
   {
      clrscr();
      q=new(nodo);
      cout<<"ingrese dato";
      cin>>q->inf;
      if(p!=NULL)
      {
           r=p;
           while(r->sig!=NULL)
           {
              r=r->sig;
           }
           r->sig=q;
           q->sig=NULL;
      }
      else
      {
          q->sig=NULL;
          p=q;
      }
      cout<<"mas datos(S/N)? ";
      cin>>op;
   }while(op=='s' || op=='S');
return(p);
}
nodo *nodo::invertir(nodo *p)
{
nodo *q,*r,*x,*y;
    q=p;
    while(q->sig!=NULL)
    {
       q=q->sig;
    }
    r=p->sig;
    q->sig=p;
    p->sig=NULL;
    y=p;
    while(r!=q)
    {
       x=r;
       r=r->sig;
       q->sig=x;
       x->sig=y;
       y=x;
    }
    p=q;
    p->recorre(p);
return(p);
}

0 comentarios:

Publicar un comentario en la entrada