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 creaListaEnlazada()• {• 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
Nodo nuevoNodo=new Nodo( 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 primeroSe 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 listaSystem.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:
id dato opc InsertarPrimero(id, dato)
1
2
3
4
21.5
15.8
12.4
40.2
1
1
1
0
21.5 1
15.8 2 21.5 1
12.4 3 15.8 221.5 1
40.2 4 12.4 3 15.8 221.5 1
null
null
null
null
Primero
Primero
Primero
Primero
Ultimo
Ultimo
Ultimo
y Ultimo
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
Top Related