Universidad Los Angeles de Chimbote Sistema de Educación Virtual Bienvenido a nuestra octava sesión, donde veremos cómo se eliminar nodos en las listas enlazadas y cómo son los programas de implementación correspondientes en Java. Comenzamos. Curso : Estructuras de datos Docente: Ing. Héctor Fiestas Bancayán 1 Universidad Los Angeles de Chimbote Sistema de Educación Virtual Listas enlazadas en Java (1) Borrado de nodos Otro algoritmo común de las listas de enlace simples es el borrado de nodos. Al contrario que la inserción de nodos, sólo hay dos casos a considerar: • Borrar el Primer nodo: Asigna el enlace del campo siguiente del nodo referenciado por top a top: • • • top = top.siguiente; // Referencia al segundo Nodo //(o NULL si hay solamente un Nodo) La siguiente imagen presenta las vistas anterior y posterior de una lista donde se ha borrado el primer nodo. en esta figura, el nodo B desaparece y el nodo A se convierte en el primer nodo. Antes Después Curso : Estructuras de datos Docente: Ing. Héctor Fiestas Bancayán 2 Universidad Los Angeles de Chimbote • • • • • Sistema de Educación Virtual Borrar cualquier nodo que no sea el primero: Localiza el nodo que precede al nodo a borrar y le asigna el enlace que hay en el campo siguiente del nodo a borrar al campo siguiente del nodo que le precede. El siguiente pseudocódigo borra el nodo D: temp = top WHILE temp.nombre IS NOT "A" temp = temp.siguiente END WHILE • • // Asumimos que temp referencia al Nodo A • • temp.siguiente = temp.siguiente.siguiente • • // Nodo D no longer exists La siguiente figura presenta las vistas anterior y posterior de una lista donde se ha borrado un nodo intermedio. En esa figura el nodo D desaparece. antes después Curso : Estructuras de datos Docente: Ing. Héctor Fiestas Bancayán 3 Universidad Los Angeles de Chimbote Sistema de Educación Virtual El siguiente listado representa el equivalente Java a los pseudocódigos de borrado anteriores: // SLLDelDemo.java class SLLDelDemo { static class Nodo { String nombre; Nodo siguiente; } // // // // // public static void main (String [] args) { En las siguientes líneas se construye la lista simplemente enlazada vista en la sesión anterior (es decir: B A D C) Esto no forma propiamente parte del borrado de nodos Nodo top = new Nodo (); top.nombre = "C"; top.siguiente = null; Nodo temp = new Nodo (); temp.nombre = "D"; temp.siguiente = top; top = temp; temp = new Nodo (); temp.nombre = "A"; temp.siguiente = top; top = temp; temp = new Nodo (); temp.nombre = "B"; temp.siguiente = top; top = temp; mostrar ("Lista enlazada inicial ", top); // 1. Borrar el primer Nodo top = top.siguiente; Curso : Estructuras de datos Docente: Ing. Héctor Fiestas Bancayán 4 Universidad Los Angeles de Chimbote Sistema de Educación Virtual mostrar ("Después de eliminar el primer nodo", top); // Regresar nuevamente B al comienzo temp = new Nodo (); temp.nombre = "B"; temp.siguiente = top; top = temp; // 2.Borrar cualquier Nodo menos el primero // En este ejemplo se borra el nodo que // contiene la letra D temp = top; while (temp.nombre.equals ("A") == false) temp = temp.siguiente; temp.siguiente = temp.siguiente.siguiente; mostrar ("Después de eliminar el nodo D ",top); } static void mostrar(String msg, Nodo topNodo) { System.out.print (msg + " "); while (topNodo != null) { System.out.print (topNodo.nombre + " "); topNodo = topNodo.siguiente; } System.out.println (); } } Cuando ejecute SLLDelDemo, observará la siguiente salida: Lista enlazada inicial B A D C Después de eliminar el primer nodo Curso : Estructuras de datos A D C Docente: Ing. Héctor Fiestas Bancayán 5 Universidad Los Angeles de Chimbote Sistema de Educación Virtual Después de eliminar el nodo D B A C Esto es todo por ahora. Hemos visto como se borran nodos en las listas enlazadas. Como tarea, debes realizar la tarea que te indico en la sesión correspondiente. Ten en cuenta que en la plataforma moodle le he puesto fecha límite de entrega que debes respetar para no tener problemas al subir tu archivo. Buena suerte y hasta la siguiente sesión. (1) Basado en structuras de Datos y Algoritmos en Java Autor: Jeff Friesen Traductor: Juan Antonio Palos (http://www.programacion.com/java/tutorial/jap_data_alg/4/) Curso : Estructuras de datos Docente: Ing. Héctor Fiestas Bancayán 6