Listas Simplemente Enlazadas María Luisa Velasco Ramírez
Listas Enlazadas Una representación enlazada de un grupo de elementos de un cierto tipo es una lista enlazada de nodos, es decir, una secuencia de nodos situados en la memoria dinámica y conectados entre sí 􀂆  Ejemplo: lista de enteros {4, 8, 5, 3, 2}
 
Como se ha visto, un nodo tiene dos atributos: El  dato, de tipo  genérico (para poder guardar cualquier tipo de objeto) Una referencia al nodo  siguiente.
public   class  Nodo {      int  dato; Nodo siguiente;      public  Nodo( int  dato) {          this .dato = dato;          this .siguiente =  null ;     } }
Una lista enlazada requiere, como mínimo, una referencia al primer nodo de la lista: Cuando la lista está vacía, el atributo  primero apunta a null: primero =  null;
public void ListaEnlazada() { primero=null; } public boolean estaVacia() { return primero==null; }
Operaciones básicas con listas Crear Lista Recorrido de la Lista  Inserción de un Elemento  Borrado de un Elemento  Búsqueda de un Elemento
Lo más eficiente es insertar al principio de la lista, pues tenemos una referencia al primer nodo Ejemplo: Se quiere insertar el elemento “1” en la siguiente lista:
public void insertarPrimero(int  dato) { //crea un nuevo Nodo Nodo nuevoNodo = new Nodo(dato); nuevoNodo.siguiente=primero; primero=nuevoNodo;
public void desplegarLista() { Nodo actual=primero; while (actual!= null) { System.out.println(“El dato es:”+actual.dato); actual= actual.siguiente; } }
Código para insertar nodos a la derecha
Para insertar nodos a la derecha, es necesario declarar e inicializar otra variable , en este caso es  último
Código ListaEnlazada   Nodo primero;   Nodo ultimo; primero=null; ultimo=null; Declaración de las variables primero y ultimo Inicializar primero y ultimo
public boolean estavacia(){ return primero==null; } public void insertarUltimo  (int  dato){ //crea un nuevo nodo NodoLista nuevoNodo=new NodoLista( dato); if(primero==null){   nuevoNodo.siguiente=primero;     primero=nuevoNodo; ultimo=nuevoNodo; } else{ nuevoNodo.siguiente=null; ultimo.siguiente=nuevoNodo; ultimo=nuevoNodo; } } Método modificado para que los nodos se inserten a la derecha nuevoNodo.siguiente será igual a null en vez de primero Se le agrega una condicion para que inserte a la derecha
public void desplegarLista(){ Nodoactual=primero; while(actual!=null){ System.out.println(“”+actual.dato); actual=actual.siguiente; } } Método para imprimir
do{ System.out.print("Introduce el dato del nodo"); System.out.flush(); dato=Integer.parseInt(entrada.readLine()); lista.insertarUltimo(dato); //insertar nodo a  la lista System.out.print("Deseas seguir insertando datos: SI=1, NO=0"); System.out.flush(); opc=Integer.parseInt(entrada.readLine()); }while(opc==1); lista.desplegarLista(); Invocación al método insertarUltimo
De manera gráfica sería: 21.5  1  15.8  2  21.5  1  12.4  3  15.8  2 21.5  1  40.2  4  12.4  3  15.8  2 21.5  1  null null null null Primero Primero Primero Primero Ultimo Ultimo Ultimo y Ultimo id dato opc InsertarPrimero(id, dato) 1 2 3 4 21.5 15.8 12.4 40.2 1 1 1 0
Eliminar nodo public NodoLista eliminarPrimero() { Nodo temp =  primero; primero = primero.siguiente; return temp; }
Tarea: Implementar en Java, un menú con las siguientes operaciones: A) Crear lista enlazada B) Insertar a la cabeza de la lista C) Insertar al final de la lista D) Borrar el elemento inicial de la lista E)Borrar el último elemento de la lista F) Desplegar los elementos de la lista Deben validar al borrar elementos de la lista que la lista no este vacía
Escribir un algoritmo que inserte un  específico elemento de la lista Escribir un algoritmo que busque un elemento en la lista y lo visualice en pantalla, en caso de no encontrarlo, mandar el mensaje correspondiente. Escribir un algoritmo que borre un elemento específico de la lista. Ver ejemplo de la diapositiva siguiente.
Eliminar Nodos
Listas enlazadas vs. Arreglos

Listas enlazadas

  • 1.
    Listas Simplemente EnlazadasMaría Luisa Velasco Ramírez
  • 2.
    Listas Enlazadas Unarepresentación enlazada de un grupo de elementos de un cierto tipo es una lista enlazada de nodos, es decir, una secuencia de nodos situados en la memoria dinámica y conectados entre sí 􀂆 Ejemplo: lista de enteros {4, 8, 5, 3, 2}
  • 3.
  • 4.
    Como se havisto, un nodo tiene dos atributos: El dato, de tipo genérico (para poder guardar cualquier tipo de objeto) Una referencia al nodo siguiente.
  • 5.
    public class Nodo {     int dato; Nodo siguiente;     public Nodo( int dato) {         this .dato = dato;         this .siguiente = null ;     } }
  • 6.
    Una lista enlazadarequiere, como mínimo, una referencia al primer nodo de la lista: Cuando la lista está vacía, el atributo primero apunta a null: primero = null;
  • 7.
    public void ListaEnlazada(){ primero=null; } public boolean estaVacia() { return primero==null; }
  • 8.
    Operaciones básicas conlistas Crear Lista Recorrido de la Lista Inserción de un Elemento Borrado de un Elemento Búsqueda de un Elemento
  • 9.
    Lo más eficientees insertar al principio de la lista, pues tenemos una referencia al primer nodo Ejemplo: Se quiere insertar el elemento “1” en la siguiente lista:
  • 10.
    public void insertarPrimero(int dato) { //crea un nuevo Nodo Nodo nuevoNodo = new Nodo(dato); nuevoNodo.siguiente=primero; primero=nuevoNodo;
  • 11.
    public void desplegarLista(){ Nodo actual=primero; while (actual!= null) { System.out.println(“El dato es:”+actual.dato); actual= actual.siguiente; } }
  • 12.
    Código para insertarnodos a la derecha
  • 13.
    Para insertar nodosa la derecha, es necesario declarar e inicializar otra variable , en este caso es último
  • 14.
    Código ListaEnlazada Nodo primero; Nodo ultimo; primero=null; ultimo=null; Declaración de las variables primero y ultimo Inicializar primero y ultimo
  • 15.
    public boolean estavacia(){return primero==null; } public void insertarUltimo (int dato){ //crea un nuevo nodo NodoLista nuevoNodo=new NodoLista( dato); if(primero==null){ nuevoNodo.siguiente=primero; primero=nuevoNodo; ultimo=nuevoNodo; } else{ nuevoNodo.siguiente=null; ultimo.siguiente=nuevoNodo; ultimo=nuevoNodo; } } Método modificado para que los nodos se inserten a la derecha nuevoNodo.siguiente será igual a null en vez de primero Se le agrega una condicion para que inserte a la derecha
  • 16.
    public void desplegarLista(){Nodoactual=primero; while(actual!=null){ System.out.println(“”+actual.dato); actual=actual.siguiente; } } Método para imprimir
  • 17.
    do{ System.out.print("Introduce eldato del nodo"); System.out.flush(); dato=Integer.parseInt(entrada.readLine()); lista.insertarUltimo(dato); //insertar nodo a la lista System.out.print("Deseas seguir insertando datos: SI=1, NO=0"); System.out.flush(); opc=Integer.parseInt(entrada.readLine()); }while(opc==1); lista.desplegarLista(); Invocación al método insertarUltimo
  • 18.
    De manera gráficasería: 21.5 1 15.8 2 21.5 1 12.4 3 15.8 2 21.5 1 40.2 4 12.4 3 15.8 2 21.5 1 null null null null Primero Primero Primero Primero Ultimo Ultimo Ultimo y Ultimo id dato opc InsertarPrimero(id, dato) 1 2 3 4 21.5 15.8 12.4 40.2 1 1 1 0
  • 19.
    Eliminar nodo publicNodoLista eliminarPrimero() { Nodo temp = primero; primero = primero.siguiente; return temp; }
  • 20.
    Tarea: Implementar enJava, un menú con las siguientes operaciones: A) Crear lista enlazada B) Insertar a la cabeza de la lista C) Insertar al final de la lista D) Borrar el elemento inicial de la lista E)Borrar el último elemento de la lista F) Desplegar los elementos de la lista Deben validar al borrar elementos de la lista que la lista no este vacía
  • 21.
    Escribir un algoritmoque inserte un específico elemento de la lista Escribir un algoritmo que busque un elemento en la lista y lo visualice en pantalla, en caso de no encontrarlo, mandar el mensaje correspondiente. Escribir un algoritmo que borre un elemento específico de la lista. Ver ejemplo de la diapositiva siguiente.
  • 22.
  • 23.