Considerem la representació habitual amb nodes de la classe Llista per manegar llistes genèriques d’elements de tipus T que podeu trobar als fitxers publics.
Els nodes són doblement encadenats amb punters al següent (seg) i a l’anterior (ant). Una llista té quatre atributs; la longitud i tres punters a nodes, un pel primer element (primer_node), un per l’ultim (ultim_node) i un altre per l’element actual (act), on tenim situat el punt d’interès de la llista.
Recordeu que si l’act d’una llista no buida té valor null significa que el punt d’interès està situat a la dreta de tot, a sobre d’un element fictici posterior a l’últim element real.
Volem implementar dins d’aquesta classe una operació nova amb la següent especificació pre/post:
Exemples:
Si x = 5 i el paràmetre implícit es
amb el punt d’interes sobre el 7, llavors el nou paràmetre implícit ha de quedar
amb el punt d’interès sobre el 7.
Si x=5 i el paràmetre implícit és
amb el punt d’interès sobre el penúltim 5, llavors el nou paràmetre implícit ha de quedar
amb el punt d’interès a la dreta del tot.
Dissenyeu aquesta operació sense utilitzar cap de les operacions primitives de les llistes, accedint directament als atributs de la classe Llista.
Entrada
L’entrada es una llista y un element x.
Sortida
La sortida es la llista obtinguda després d’haver eliminat de la llista d’entrada tots els nodes que contenien l’element x. A més a més, el punter act ha de seguir apuntant al mateix element al que apuntava abans de cridar el mètode o, si referenciava a un node que contenia x, ha d’apuntar al següent element (si n’hi ha) o a la dreta del tot (si no n’hi ha). Enrecordeu-vos d’actualitzar la longitud de la llista i de esborrar correctament tots els elements amb l’operador delete, d’altra banda el resultat no serà acceptat pel Jutge.
Observació
Només s’ha d’enviar un fitxer que contengui la funció amb la capçalera de l’enunciat i qualsevol altra funció auxiliar que cregueu convenient, sense la funció main i sense posar-hi cap “include”.