Dadas dos listas de enteros, queremos saber si una es igual circularmente a la otra. Es decir, si se puede obtener una lista a partir de la otra rotando sus elementos.
Por ejemplo: l1 = [1, 2, 3] es igual circularmente a l2 = [3, 1, 2], porque al colocar el 3 de l2 al final, obtenemos l1. Otro ejemplo: [2, 7, 1, 0] no es igual a [0, 1, 7, 2]. Un caso especial es que consideraremos que dos listas vacías son iguales circularmente.
El ejercicio es implementar la función siguiente:
/** * @pre cierto * @post se devuelve cierto si l1 y l2 son iguales circularmente, * falso en caso contrario. */ bool circularly_equal(const list<int>& l1, const list<int>& l2)
Solo hay que enviar esta función.
Observación Sólo tenéis que enviar el procedimiento requerido; el programa principal será ignorado.
circularly_equal([], []) => true circularly_equal([1, 2], [2]) => false circularly_equal([1, 2], [2, 1]) => true circularly_equal([5, 3, 1], [3, 1, 5]) => true