Home Algoritmos y Estructuras de Datos (VJ1215)

Curso 2023/2024

Ejemplos de errores en el ejercicio 2.g del tema 2

La siguiente solución contiene varios errores. Piensa cuáles son.

void Cola::eliminar(int dato) {

   if (primero == nullptr)
      return;

   if (primero->dato == dato) {
      Nodo * basura = primero;
      primero = primero -> siguiente;
      delete basura;
      return;
   }      
       
   for (Nodo * actual = primero; actual != nullptr; actual = actual->siguiente)
      if (actual->siguiente->dato == dato) {
	 Nodo * basura = actual->siguiente;
	 actual->siguiente = actual->siguiente->siguiente;
	 delete basura;
	 return;
      }

}
      

¿Por qué es incorrecta?

  1. Si había varios datos y se elimina el último, falta actualizar ultimo.

  2. Si el dato que se elimina es el primero y no había más, falta dejar nullptr en ultimo.

  3. Si el dato que nos piden eliminar no está en la cola, cuando el bucle llegue al último nodo fallará el acceso a actual->siguiente->dato.