Hay te dejo el codigo de la lista por si te sirve, ya que tenia la lista a mano implementada y asi te ahorras el implementarla!
Reutilizacion del codigo! jajaja
#include <stdlib.h>
#include <iostream>
#include <stdio.h>
#include <conio.h>
#if !defined(_LISTA_H)
#define _LISTA_H
typedef TIPO tipodato; // TIPO= tipo del dato a guardar en la lista
class Lista{
struct nodolista{
tipodato* dato;
nodolista *suce; //enlace a siguiente nodo
};
nodolista *E_Lista; //Puntero a primer nodo.
int num_elementos; //Numero de elmentos de la lista
public:
Lista();
bool vacia();
tipodato* frente();
void borrar();
bool borrar(tipodato* x);
bool borrar(string _titulo);
void insertar(tipodato* x);
bool insorden(tipodato* x);
tipodato* buscar(string _titulo);
void mostrar();
int num_elem();
void resto (Lista &aux);
~Lista();
};
#endif
/************************************************** **********/
// Nombre y Apellidos:
// Asignatura: LP2
// Grupo: G8
// Número de Entrega: 1º
// Año:
/************************************************** **********/
#include "lista.h"
using namespace std;
Lista::Lista()
{
E_Lista=NULL;
num_elementos=0;
}
bool Lista::vacia()
{
return(E_Lista==NULL);
}
tipodato* Lista::frente()
{
return(E_Lista->dato);
}
void Lista::insertar(tipodato* x)
{
nodolista *q;
q=new nodolista;
q->dato=x;
q->suce=E_Lista;
E_Lista=q;
num_elementos++;
}
bool Lista::insorden(tipodato* x)
{
bool insertado=false;
nodolista *punt_aux,*ant,*q;
q=new nodolista;
q->dato=x;
punt_aux=E_Lista;
ant=NULL;
if(vacia())
{
q->suce=E_Lista;
E_Lista=q;
num_elementos++;
}
else
while(!insertado)
{
if(punt_aux!=NULL)
if((q->dato->get_titulo ()). compare (punt_aux->dato->get_titulo ())<0)
{
q->suce=punt_aux;
if(ant==NULL)
E_Lista=q;
else
ant->suce=q;
insertado=true;
num_elementos++;
}
else
{
ant=punt_aux;
punt_aux=punt_aux->suce;
}
else
{
q->suce=punt_aux;
if(ant==NULL)
E_Lista=q;
else
ant->suce=q;
insertado=true;
num_elementos++;
}
}
return (insertado);
}
void Lista::borrar()
{
nodolista *p;
if(!vacia())
{
p=E_Lista;
E_Lista=E_Lista->suce;
delete p;
num_elementos--;
}
}
bool Lista::borrar(tipodato* x)
{
nodolista *ant,*p;
bool enc=false;
if(!vacia())
{
p=E_Lista;
while ((enc!=1) && (p!=NULL))
{
if (p->dato==x)
enc=true;
else
{
ant=p;
p=p->suce;
}
}
if (enc)//Si existe, organizamos la lista y lo borramos
{
if (p==E_Lista)
E_Lista=E_Lista->suce; //Si es el primero
else
ant->suce=p->suce;//si esta en medio o final
delete p;
num_elementos--;
}
}
return enc;
}
bool Lista::borrar(string _titulo)
{
nodolista *ant,*p;
bool enc=false;
if(!vacia())
{
p=E_Lista;
while ((enc!=1) && (p!=NULL))
{
if ((p->dato->get_titulo()).compare (_titulo)==0)
enc=true;
else
{
ant=p;
p=p->suce;
}
}
if (enc)//Si existe, organizamos la lista y lo borramos
{
if (p==E_Lista)
E_Lista=E_Lista->suce; //Si es el primero
else
ant->suce=p->suce;//si esta en medio o final
delete p;
num_elementos--;
}
}
return enc;
}
tipodato* Lista::buscar(string _titulo)
{
nodolista *aux;
aux=E_Lista;
while(aux!=NULL)
{
if((aux->dato->get_titulo()). compare (_titulo)==0)
return (aux->dato);
else aux=aux->suce;
}
return (NULL);
}
int Lista::num_elem()
{
return(num_elementos);
}
void Lista::mostrar()
{
nodolista *aux;
aux=E_Lista;
cout<<endl;
if (aux==NULL) cout<<"Lista vacia"<<endl;
else
while (aux!=NULL)
{
cout<<aux->dato<<endl;
aux=aux->suce;
if(aux!=NULL)
{
cout<<"[Tecla para continuar]";
getch();
cout<<endl;
}
}
cout<<" -------- Fin de la lista --------"<<endl;
}
void Lista :: resto (Lista &aux){
aux.E_Lista=E_Lista->suce;
/*while (aux.vacia()){
aux.borrar();
if (!vacia())
{
nodolista* p;
p=E_Lista->suce;
while (p!=NULL){
aux.insorden (p->dato);
p=p->suce;
}
}
}*/
}
Lista::~Lista()
{
nodolista *aux;
cout<<"Destruyendo lista"<<endl;
while(!vacia())
{
aux=E_Lista;
E_Lista=E_Lista->suce;
// delete (aux->dato);
delete aux;
}
}
Espero que te sirva!