You are on page 1of 4

TEMA 4 Conceptos de Java para Estructuras de Datos Representación enlazada

EJERCICIOS RESUELTOS

Ejercicio 1.- Añadir a la clase LEG un método que inserte un nuevo elemento al final de la lista:
public void insertarEnFin(E x);

¿Cuál es el coste del nuevo método? Solución:
public void insertarEnFin(E x) { NodoLEG<E> aux = primero; if (aux == null) // Lista vacía primero = new NodoLEG<E>(x); else { while (aux.siguiente != null) aux = aux.siguiente; aux.siguiente = new NodoLEG<E>(x); } talla++; }

El coste del método es lineal respecto del número de elementos de la lista.

Ejercicio 2.- Escribir el método eliminar de la LEGCircular. Solución:
public boolean eliminar(E x) { if (ultimo == null) return false; NodoLEG<E> aux = ultimo.siguiente, ant = ultimo; while (aux != ultimo && !aux.dato.equals(x)) { ant = aux; aux = aux.siguiente; } if (!aux.dato.equals(x)) return false; if (aux == ant) ultimo = null; else { ant.siguiente = aux.siguiente; if (ultimo == aux) ultimo = ant; } talla--; return true; }

siguiente != null) aux = aux. for (NodoLDEG <E> aux = primero. Solución: public String toStringDesc() { NodoLDEG<E> aux = primero. Solución: public void insertarEnFin(E x) { NodoLDEG<E> aux = primero. } .toString() + “\n” + res.toString() + “\n”. } Solución alternativa: public String toStringDesc() { String res = “”.Diseña el método insertarEnFin(E x) de la clase LDEG. aux). if (aux == null) primero = new NodoLDEG<E>(x). } Ejercicio 4. else { while (aux. del último al primero. } } return res.siguiente = new NodoLDEG<E>(x. } talla++.dato.siguiente..Ejercicio 3. String res = “”. null. aux != null.siguiente. aux = aux.siguiente != null) aux = aux. aux = aux.Escribir un método toString() de LDEG que obtenga una representación textual de los nodos de la lista en orden descendente.dato.siguiente) res = aux. if (aux != null) { // Lista no vacía while (aux. return res. while (aux != null) { res += aux. aux..anterior.

talla--.siguiente.siguiente = aux. no hará falta continuar recorriendo la lista ya que todos los elementos siguientes también serán mayores que x. } else ant = aux. ant = null. ant = null.siguiente. } } } .dato.Ejercicio 5. aux = aux. while (aux != null && res < 0) { res = aux. x.compareTo(x). Solución (para la clase LEG): public class LEGDeComparables<E extends Comparable<E>> extends LEG<E> { public void eliminarMayor(E x) { NodoLEG<E> aux = primero.. } Ejercicio 6. return true. else ant. } } if (aux == null || res > 0) return false. while (aux != null) { int res = aux.siguiente. talla--.¿Es conveniente que LEGOrdenada sobrescriba el método eliminar de LEG? En caso afirmativo. if (res > 0) { // Borrar if (ant == null) primero = aux.siguiente. if (ant == null) primero = aux.compareTo(x). int res = -1.siguiente. pues podemos mejorar la eficiencia cuando el elemento que vamos a eliminar. public boolean eliminar(E x) { NodoLEG<E> aux = primero. else ant. no se encuentra en la lista: cuando encontremos un elemento en la lista que sea mayor que x.. indíquese por qué y realícense las modificaciones oportunas.siguiente.siguiente = aux.dato. Solución: Sí que debe sobrescribirlo. en las clases LEG y LEGOrdenada.Diseña el método eliminarMayor(E x). if (res < 0) { ant = aux. aux = aux. que borra de la lista todos los elementos mayores que x.

que devuelve el elemento de la lista que ocupa dicha posición.siguiente = null.. NodoLEG<E> aux = ultimo. Solución: public class LEGCircularDeComparables<E extends Comparable<E>> extends LEGCircular <E> { public E buscarMin() { if (ultimo == null) return null. else ant. return min.dato. aux = null. ant = null.Escribe el método E buscarMin() en la clase LEGCircular.siguiente. Solución: public E recuperar(int indice) throws ElementoNoEncontrado { if (indice < 0 || indice >= talla) throw new ElementoNoEncontrado(“Indice ”+indice+“ fuera de rango”).dato. que devuelve el menor elemento de la lista.. return aux. } else { ant = aux.dato.Escribe el método E recuperar(int indice) en la clase LEG.compareTo(x). i++) aux = aux. NodoLEG<E> aux = primero. for (int i = 0. } .compareTo(min) < 0) min = aux. El método deberá lanzar la excepción ElementoNoEncontrado si el índice está fuera de rango. if (res > 0) { // Borrar los nodos que quedan a continuación if (ant == null) primero = null. while (aux != null) { int res = aux. } } Ejercicio 8.dato.dato. talla = 0. E min = aux.siguiente. } while (aux != ultimo). aux = aux. do { aux = aux. talla++. i < indice. if (aux.siguiente.Solución (para la clase LEGOrdenada): public void eliminarMayor(E x) { NodoLEG<E> aux = primero. } } } Ejercicio 7.