Curso 2023/2024
Esto son ejemplos de errores cometidos por estudiantes. Piensa en qué casos pueden fallar.
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; }
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 &&
.
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; }
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.
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; }
Fallará si n2
llega a valer nullptr
antes que n1
.