Home Algoritmos y Estructuras de Datos (VJ1215)

Curso 2023/2024

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.

Ejemplo de solución incorrecta 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;

}
	

¿Por qué es incorrecta?

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 &&.

Ejemplo de solución incorrecta 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;

}
	

¿Por qué es incorrecta?

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.

Ejemplo de solución incorrecta 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;
  
}
	

¿Por qué es incorrecta?

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