Listas dobles

Intercalar unir y sumar en listas dobles

Hacer un programa que permita insertar, intercalar, unir y sumar dos listas doblemente enlazadas.

#include <iostream.h>
#include <conio.h>
struct nodo
{
 int nro;
 struct nodo* sgte;
 struct nodo* ante;
};
typedef struct nodo* Tlista;
void incertar(Tlista &,int);
void intercala(Tlista &,Tlista &,Tlista &);
void unir(Tlista &,Tlista &,Tlista &);
void listado(Tlista);
void sumar(Tlista &,Tlista &, Tlista &);
void main(void)
{
 Tlista lista1,lista2,lista3,lista4,lista5;
 lista1=lista2=lista3=lista4=lista5=NULL;
 int opc,n,i,k;
 do
   {clrscr();
    cout<<"[1]->INSERTAR NUMEROS\n";
    cout<<"[2]->INTERCALAR\n";
    cout<<"[3]->UNIR\n";
    cout<<"[4]->SUMAR\n";
    cout<<"[0]->SALIR\n";
    cout<<"INGRESE OPCION:";
    cin>>opc;
    switch(opc)
          {
           case 1:
                  clrscr();
                  cout<<"INGRESE LIMITE DE LAS LISTAS";
                  cin>>n;
                  cout<<"\nLISTA NUMERO 1";
                  for(i=0;i<n;i++)
                     {
                      cout<<"\nINCERTE VALOR ["<<(i+1)<<"]";
                      cin>>k;
                      incertar(lista1,k);
                     }
                  cout<<"\nLISTA NUMERO 2";
                  for(i=0;i<n;i++)
                     {
                      cout<<"\nINCERTE VALOR ["<<(i+1)<<"]";
                      cin>>k;
                      incertar(lista2,k);
                     }
                  break;
           case 2:
                  clrscr();
                  cout<<"LAS LISTAS FUERON INTERCALADAS";
                  intercala(lista1,lista2,lista3);
                  cout<<"\nLISTA 1";
                  listado(lista1);
                  cout<<"\nLISTA 2";
                  listado(lista2);
                  cout<<"\nLISTA UNIDA";
                  listado(lista3);
                  getch();
                  break;
           case 3:
                  clrscr();
                  cout<<"LA LISTAS FUERON UNIDAS";
                  unir(lista1,lista2,lista4);
                  cout<<"\nLISTA 1";
                  listado(lista1);
                  cout<<"\nLISTA 2";
                  listado(lista2);
                  cout<<"\nLISTA UNIDA";
                  listado(lista4);
                  getch();
                  break;
           case 4:
                  clrscr();
                  cout<<"LA LISTAS FUERON SUMADAS";
                  sumar(lista1,lista2,lista5);
                  cout<<"\nLISTA 1";
                  listado(lista1);
                  cout<<"\nLISTA 2";
                  listado(lista2);
                  cout<<"\nLISTA SUMADA";
                  listado(lista5);
                  getch();
                  break;
         }
   }while(opc!=0);
}
void incertar(Tlista &lista,int n)
{
 Tlista nu;
 nu=new(struct nodo);
 nu->nro=n;
 if(lista==NULL)
   {
    lista=nu;
    lista->sgte=NULL;
    lista->ante=NULL;
   }
 else
   {
    nu->sgte=lista;
    nu->ante=lista->ante;
    lista->ante=nu;
    lista=nu;
   }
}
void intercala(Tlista &lista1,Tlista &lista2,Tlista &lista3)
{
 int x;
 Tlista l1,l2;
 l1=lista1;
 l2=lista2;
 while(l1!=NULL && l2!=NULL)
      {if(l1!=NULL)
         {
          x=l1->nro;
          incertar(lista3,x);
         }
       if(l2!=NULL)
         {
          x=l2->nro;
          incertar(lista3,x);
         }
       l1=l1->sgte;
       l2=l2->sgte;
      }
}
void unir(Tlista &lista1,Tlista &lista2,Tlista &lista4)
{
 int x;
 Tlista l1,l2;
 l1=lista1;
 l2=lista2;
 while(l1!=NULL)
      {
       x=l1->nro;
       incertar(lista4,x);
       l1=l1->sgte;
      }
 while(l2!=NULL)
      {
       x=l2->nro;
       incertar(lista4,x);
       l2=l2->sgte;
      }
}
void listado(Tlista lista)
{
 Tlista p;
 p=lista;
 while(p!=NULL)
      {cout<<"\n";
       cout<<p->nro;
       p=p->sgte;
      }
}

void sumar(Tlista &lista1,Tlista &lista2,Tlista &lista5)
{
 int x,s,y;
 Tlista l1,l2;
 l1=lista1;
 l2=lista2;
 while(l1!=NULL && l2!=NULL)
      {if(l1!=NULL)
         {
          x=l1->nro;
         }
       if(l2!=NULL)
         {
          y=l2->nro;
         }
         s=x+y;
         incertar(lista5,s);
       l1=l1->sgte;
       l2=l2->sgte;
      }
}
intercalar unir y sumar en listas dobles
intercalar unir y sumar en listas dobles
intercalar unir y sumar en listas dobles
intercalar unir y sumar en listas dobles

  Continuando con Listas Dobles, les comparto el siguiente post: Multiplica pares, divide impares