Heu d’implementar una funció que rep dues llistes d’enters l1, l2 com a paràmetre per referència. Ambdues llistes se suposen ordenades creixentment. La funció haurà d’insertar tots els elements de l2 dins de l1, de manera que l1 continui quedant ordenat creixentment. En altres paraules, el valor final de l1 haurà de ser el resultat de fusionar ordenadament els valors inicials de l1 i l2.
Important: Heu de garantir que els elements que la llista l1 contenia inicialment queden inalterats. En particular, la funció no els pot eliminar i tornar a afegir després.
Aquesta és la capcelera:
// Pre: l1 i l2 estan ordenades creixentment. Siguin L1 i L2 els seus valors inicials. // Post: l1 conté la fusió ordenada de L1 i L2. // A més a més, els elements inicials de la llista han persistit i // no han canviat de valor. void mergeIntoFirstList(list<int> &l1, list<int> l2);
Aquí tenim un exemple de comportament de la funció:
mergeIntoFirstList([1,3,3,5],[2,3,4,7,8) = [1,2,3,3,3,4,5,7,8]
Observació Només cal enviar el procediment demanat; el programa principal serà ignorat.
Observació
La vostra funció i subfuncions que creeu han de treballar només amb llistes. Avaluació sobre 10 punts:
Entenem com a solució ràpida una que és correcta, de cost lineal i capaç de superar els jocs de proves públics i privats. Entenem com a solució lenta una que no és ràpida, però és correcta i capaç de superar els jocs de proves públics.
Una solució que altera, o elimina els elements originals de la primera llista i els torna a afegir més tard rebrà un 0.
Input/Output