#include <iostream>
#include <cstddef>
using namespace std;
// ------------------------- LISTA ENLAZADA SIMPLE -------------------------
struct Nodo {
int dato;
Nodo* siguiente;
Nodo(int dato) : dato(dato), siguiente(NULL) {}
};
class ListaEnlazada {
private:
Nodo* cabeza;
public:
ListaEnlazada() : cabeza(NULL) {}
int eleccion;
~ListaEnlazada() {
while (cabeza != NULL) {
Nodo* temp = cabeza;
cabeza = cabeza->siguiente;
delete temp;
}
}
void agregarAlFinal(int dato) {
Nodo* nuevoNodo = new Nodo(dato);
if (cabeza == NULL) {
cabeza = nuevoNodo;
} else {
Nodo* temp = cabeza;
while (temp->siguiente != NULL) {
temp = temp->siguiente;
}
temp->siguiente = nuevoNodo;
}
}
void eliminarNodo(int dato) {
if (cabeza == NULL) return;
if (cabeza->dato == dato) {
Nodo* temp = cabeza;
cabeza = cabeza->siguiente;
delete temp;
return;
}
Nodo* actual = cabeza;
while (actual->siguiente != NULL && actual->siguiente->dato != dato) {
actual = actual->siguiente;
}
if (actual->siguiente != NULL) {
Nodo* temp = actual->siguiente;
actual->siguiente = temp->siguiente;
delete temp;
}
}
void mostrar() {
Nodo* temp = cabeza;
cout<<"LA LISTA INGRESADA AL MOMENTO ES: \n";
while (temp != NULL) {
cout << temp->dato << " -> ";
temp = temp->siguiente;
}
cout << "NULL" << endl;
}
void escoger()
{
cout<<"OPCIONES QUE PUEDE ESCOGER \n";
cout<<"agregar=1; eliminar=2; mostrar=3; detener=4 \n";
cout<<"Que operacion desea realizar? ";
cin>>eleccion;
};
};
// ------------------------- PROGRAMA PRINCIPAL -------------------------
int main() {
cout << "======== Lista Enlazada Simple ========\n";
ListaEnlazada listaSimple;
listaSimple.escoger();
while(listaSimple.eleccion!=4)
{
if(listaSimple.eleccion>4)
{
return 0;
}
if(listaSimple.eleccion==1)
{
int nodo,cantidadnodos,contador=0;
cout<<"Cuantos nodos desea ingresar? ";
cin>>cantidadnodos;
while(contador<cantidadnodos)
{
cout<<"Ingresa el valor del nodo ";
cin>>nodo;
listaSimple.agregarAlFinal(nodo);
contador++;
}
cout<<"\n\n";
contador=0;
}
if(listaSimple.eleccion==2)
{
int nodoeliminado;
cout<<"Que valor dese eliminar? ";
cin>>nodoeliminado;
listaSimple.eliminarNodo(nodoeliminado);
}
if(listaSimple.eleccion==3)
{
cout<<"\n\n";
listaSimple.mostrar();
}
cout<<"\n\n";
listaSimple.escoger();
}
return 0;
//cout<<"\n\n";
/* cout<<"Ingresa el valor de la cabeza ";
cin>>nodo1;
listaSimple.agregarAlFinal(nodo1);
cout<<"Ingresa el valor de la cabeza ";
cin>>nodo1;
listaSimple.agregarAlFinal(nodo1);
listaSimple.agregarAlFinal(10);
listaSimple.agregarAlFinal(20);
listaSimple.agregarAlFinal(30);
cout << "Lista original: ";
listaSimple.mostrar(); // 10 -> 20 -> 30 -> NULL
listaSimple.eliminarNodo(20);
cout << "Despues de eliminar 20: ";
listaSimple.mostrar(); // 10 -> 30 -> NULL
*/