Home Algoritmos y Estructuras de Datos (VJ1215)

Curso 2022/2023

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

Esto son ejemplos de errores cometidos por estudiantes. Piensa en qué casos pueden fallar.

Error 1

bool Cola::colasIguales(const Cola & otraCola) const {

   Nodo * n1 = primero, * n2 = otraCola.primero;

   while (n1 != nullptr || n2 != nullptr) {
      if (n1->dato != n2->dato)
	 return false;
      n1 = n1->siguiente;
      n2 = n2->siguiente;
   }

   return true;

}
	

Solución

Si llegamos al final de una cola antes que al final de la otra, eso va a fallar, por haber utilizado || donde se debería utilizar &&.

Error 2

bool Cola::colasIguales(const Cola & otraCola) const {

   Nodo * n1 = primero, * n2 = otraCola.primero;

   while (n1 != nullptr && n2 != nullptr) {
      if (n1->dato != n2->dato)
	 return false;
      n1 = n1->siguiente;
      n2 = n2->siguiente;
   }

   return true;

}
	

Solución

Es incorrecto devolver true al finalizar ese bucle, no se ha tenido en cuenta que se puede alcanzar el final de una cola sin haber alcanzado el final de la otra.

Error 3

bool Cola::colasIguales(const Cola & otraCola) const {
   
   Nodo * n2 = otraCola.primero;

   for (Nodo * n1 = primero; n1 != nullptr; n1 = n1->siguiente) {
      if (n1->dato != n2->dato)
	 return false;
      n2 = n2->siguiente;
   }

   return n2 == nullptr;
  
}
	

Solución

Fallará si n2 llega a valer nullptr antes que n1.