#include #include using namespace std; #include "Lista.h" Lista::Nodo::Nodo(float d, Nodo * a, Nodo * s) : dato{d}, anterior{a}, siguiente{s} { } Lista::Lista() : primero{nullptr}, ultimo{nullptr}, talla{0} { } void Lista::mostrar() const { cout << "Normal: ["; for (Nodo * n = primero; n != nullptr; n = n->siguiente) { cout << n->dato; if (n != ultimo) cout << ", "; } cout << "] --- Al revés: ["; for (Nodo * n = ultimo; n != nullptr; n = n->anterior) { cout << n->dato; if (n != primero) cout << ", "; } cout << "]" << endl; } /* void Lista::insertar(float dato, int posicion) { if (posicion < 0 || posicion > talla) throw string("Insertando dato en posicion no valida de lista"); if (primero == nullptr) primero = ultimo = new Nodo(dato, nullptr, nullptr); else if (posicion == 0) { primero = new Nodo(dato, nullptr, primero); primero->siguiente->anterior = primero; } else if (posicion == talla) { ultimo = new Nodo(dato, ultimo, nullptr); ultimo->anterior->siguiente = ultimo; } else { Nodo * actual = primero; for (int i = 0; i < posicion; i++) actual = actual->siguiente; actual->anterior = new Nodo(dato, actual->anterior, actual); actual->anterior->anterior->siguiente = actual->anterior; } talla++; } */ void Lista::insertar(float dato, int posicion, Nodo * actual) { if (posicion == 0) { actual->anterior = new Nodo(dato, actual->anterior, actual); actual->anterior->anterior->siguiente = actual->anterior; } else insertar(dato, posicion - 1, actual->siguiente); } void Lista::insertar(float dato, int posicion) { if (posicion < 0 || posicion > talla) throw string("Insertando dato en posicion no valida de lista"); if (primero == nullptr) primero = ultimo = new Nodo(dato, nullptr, nullptr); else if (posicion == 0) { primero = new Nodo(dato, nullptr, primero); primero->siguiente->anterior = primero; } else if (posicion == talla) { ultimo = new Nodo(dato, ultimo, nullptr); ultimo->anterior->siguiente = ultimo; } else insertar(dato, posicion, primero); talla++; } /* void Lista::eliminar(int posicion) { if (posicion < 0 || posicion >= talla) throw string("Eliminando dato en posicion no valida de lista"); if (talla == 1) { delete primero; primero = ultimo = nullptr; } else if (posicion == 0) { Nodo * basura = primero; primero = primero->siguiente; primero->anterior = nullptr; delete basura; } else if (posicion == talla - 1) { Nodo * basura = ultimo; ultimo = ultimo->anterior; ultimo->siguiente = nullptr; delete basura; } else { Nodo * basura = primero; for (int i = 0; i < posicion; i++) basura = basura->siguiente; basura->anterior->siguiente = basura->siguiente; basura->siguiente->anterior = basura->anterior; delete basura; } talla--; } */ void Lista::eliminar(int posicion, Nodo * basura) { if (posicion == 0) { basura->anterior->siguiente = basura->siguiente; basura->siguiente->anterior = basura->anterior; delete basura; } else eliminar(posicion - 1, basura->siguiente); } void Lista::eliminar(int posicion) { if (posicion < 0 || posicion >= talla) throw string("Eliminando dato en posicion no valida de lista"); if (talla == 1) { delete primero; primero = ultimo = nullptr; } else if (posicion == 0) { Nodo * basura = primero; primero = primero->siguiente; primero->anterior = nullptr; delete basura; } else if (posicion == talla - 1) { Nodo * basura = ultimo; ultimo = ultimo->anterior; ultimo->siguiente = nullptr; delete basura; } else eliminar(posicion, primero); talla--; }