Aqui os dejo el codigo completo
Código
#include <iostream> #include <stdlib.h> using namespace std; typedef struct tnodo *pnodo; typedef struct tnodo{ int dato; pnodo sig; }; typedef struct tlista{ pnodo inicio; pnodo final; }; void inicia(tlista &lista); void crear(pnodo &nuevo); void agregar_inicio(tlista &lista, pnodo nuevo); void agregar_final(tlista &lista, pnodo nuevo); void agregar_orden(tlista &lista, pnodo nuevo); pnodo quitar_inicio(tlista &lista); pnodo quitar_final(tlista &lista); pnodo quitar_nodo(tlista &lista, int valor); bool buscar_nodo(tlista lista,int valor); void mostrar(tlista lista); int main() { tlista milista; pnodo nuevonodo, eliminado; int opcion, num; inicia(milista); do{ system("cls"); cout << "1. Iniciar lista" << endl; cout << "2. Agregar al inicio" << endl; cout << "3. Agregar al final" << endl; cout << "4. Agregar en orden" << endl; cout << "5. Quitar al inicio" << endl; cout << "6. Quitar al final" << endl; cout << "7. Quitar valor" << endl; cout << "8. Buscar valor" << endl; cout << "9. Mostrar lista" << endl; cout << "10. Salir" << endl; cin >> opcion; switch(opcion){ case 1: inicia(milista); break; case 2: crear(nuevonodo); if(nuevonodo!=NULL){agregar_inicio(milista,nuevonodo);}; break; case 3: crear(nuevonodo); if(nuevonodo!=NULL){agregar_final(milista,nuevonodo);}; break; case 4: crear(nuevonodo); if(nuevonodo!=NULL){agregar_orden(milista,nuevonodo);}; break; case 5: eliminado=quitar_inicio(milista); if(eliminado!=NULL){cout << "Eliminado: " << eliminado->dato << endl;delete(eliminado);} else{cout << "LISTA VACIA O NO EXISTE VALOR" << endl;}; break; case 6: eliminado=quitar_final(milista); if(eliminado!=NULL){cout << "Eliminado: " << eliminado->dato << endl;delete(eliminado);} else{cout << "LISTA VACIA O NO EXISTE VALOR" << endl;}; break; case 7: cout << "Igrese valor a eliminar: "; cin >> num; eliminado=quitar_nodo(milista,num); if(eliminado!=NULL){cout << "Eliminado: " << eliminado->dato << endl; delete(eliminado);} else{ cout << "LISTA VACIA O NO EXISTE VALOR" << endl;}; break; case 8: cout << "Ingrese valor buscado: "; cin >> num; if(buscar_nodo(milista,num)==true){cout << "VALOR ENCONTRADO" << endl;} else{ cout << "LISTA VACIA O NO EXISTE VALOR" << endl;}; break; case 9: cout << "*** LISTA ***" << endl; mostrar(milista); break; case 10: cout << "FIN DEL PROGRAMA" << endl; break; default: cout << "Opcion incorrecta" << endl; } system("pause"); }while(opcion!=10); } void inicia(tlista &lista) { lista.inicio=NULL; lista.final=NULL; } void crear(pnodo &nuevo) { nuevo=new tnodo; if(nuevo!=NULL){ cout << "Ingrese valor: "; cin >> nuevo->dato; nuevo->sig=NULL; } else{ cout << "MEMORIA INSUFICIENTE" << endl; } } void agregar_inicio(tlista &lista, pnodo nuevo) { if(lista.inicio==NULL){ lista.inicio=nuevo; lista.final=nuevo; } else{ nuevo->sig=lista.inicio; lista.inicio=nuevo; } } void agregar_final(tlista &lista, pnodo nuevo) { if(lista.inicio==NULL){ lista.inicio=nuevo; lista.final=nuevo; } else{ lista.final->sig=nuevo; lista.final=nuevo; } } void agregar_orden(tlista &lista, pnodo nuevo) { pnodo i; if(lista.inicio==NULL){ lista.inicio=nuevo; lista.final=nuevo; } else{ if(nuevo->dato<lista.inicio->dato){ nuevo->sig=lista.inicio; lista.inicio=nuevo; } else{ if(nuevo->dato>lista.final->dato){ lista.final->sig=nuevo; lista.final=nuevo; } else{ for(i=lista.inicio;i->sig!=NULL && nuevo->dato>(i->sig)->dato;i=i->sig){ nuevo->sig=i->sig; i->sig=nuevo; } } } } } pnodo quitar_inicio(tlista &lista) { pnodo borrado; if(lista.inicio==NULL){ borrado=NULL; } else{ if(lista.inicio==lista.final){ borrado=lista.inicio; lista.inicio=NULL; lista.final=NULL; } else{ borrado=lista.inicio; lista.inicio=borrado->sig; borrado->sig=NULL; } } return borrado; } pnodo quitar_final(tlista &lista) //ERROR { pnodo borrado, i; if(lista.inicio==NULL){ borrado=NULL; } else{ if(lista.inicio==lista.final){ borrado=lista.inicio; lista.inicio=NULL; lista.final=NULL; } else{ for(i=lista.inicio;(i->sig)->sig!=NULL;i=i->sig); borrado=lista.final; lista.final->sig=NULL; } } return borrado; } pnodo quitar_nodo(tlista &lista, int valor) //ERROR { pnodo borrado, i; if(lista.inicio==NULL){ borrado=NULL; } else{ if(lista.inicio->dato==valor){ borrado=lista.inicio; if(lista.inicio==lista.final){ lista.inicio=NULL; lista.final=NULL; } else{ lista.inicio=NULL; borrado->sig=NULL; } } else{ for(i=lista.inicio;i->sig!=NULL && valor!=(i->sig)->dato;i=i->sig); if(i->sig!=NULL){ borrado=NULL; } else{ borrado=i->sig; borrado->sig=NULL; } } } return borrado; } bool buscar_nodo(tlista lista,int valor) { pnodo i; bool encontrado=false; if(lista.inicio!=NULL){ for(i=lista.inicio;i!=NULL && encontrado==false;i=i->sig){ if(i->dato==valor){ encontrado=true; } } } return encontrado; } void mostrar(tlista lista) { pnodo i; if(lista.inicio!=NULL){ for(i=lista.inicio;i!=NULL;i=i->sig){ cout << "Nodo: " << i->dato << endl; } cout << endl; } else{ cout << "LISTA VACIA" << endl; } }