Home Algoritmos y Estructuras de Datos (VJ1215)

Curso 2022/2023

Solución del ejercicio 8.b del tema 2

La siguiente solución tiene los siguientes costes, siendo n la talla de la lista:

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::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) { // Suponiendo 0 <= posicion <= talla
   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++;
}