Para crear una lista enlazada simple necesitamos crear los siguientes elementos.
Usaré el lenguaje Java ya que nos permite ver un poco mas acerca de el algoritmo sin tener que meternos tanto con destructores y punteros. Aqui se entiende mas facil
Nodo.- El nodo es un eslavon le la lista, y contiene dos partes. el Elemento y el NodoSigiuiente. el siguiente ejemplo en Java permite ver como se implementaria el nodo.
/**
* El nodo de la lista enlazada
* @author Ernesto Maldonado Thomas
*/
public class Nodo
private T elemento;
private Nodo
/**
* Permite crear una instancia del Nodo
*/
public Nodo() {
super();
}
/**
* Permite obtener el valor que almacena el Nodo
* @return
*/
public T getElemento() {
return elemento;
}
/**
* Permite asignar el valor que almacena el nodo
* @param elemento
*/
this.elemento = elemento;
}
/**
* Permite obtener el siguiente nodo
* @return
*/
public Nodo
return siguiente;
}
/**
* Permite asignar el siguiente Nodo
* @param siguiente
*/
public void setSiguiente(Nodo
this.siguiente = siguiente;
}
}
La Lista.- Debe de contener un elemento que este siempre apuntando a la cabeza de la lista y otro a la cola. y los metodos necesarios para agregar un elemento, eliminar un elemento, buscar un elemento etc...
/**
* Permite generar una lista enlazada simple.
* @author Ernesto Maldonado Thomas
* @param
*/
public class ListaEnlazadaSimple
private Nodo
/**
* Permite crear una instancia de la lista enlazada Simple
*/
public ListaEnlazadaSimple() {
super();
}
/**
* Permite agregar un elemento poniendolo en el ultimo lugar de la lista
* @param elemento
*/
public void agregarElemento(T elemento) {
Nodo
nuevoNodo.setElemento(elemento);
if (cabeza == null) { // Si la lista esta vacia
cabeza = nuevoNodo; // La cabeza se convierte en el nuevo nodo
cola = nuevoNodo; // Y la cola tambien ya que solo hay uno
} else { // Si la lista no esta vacia
cola.setSiguiente(nuevoNodo); // El siguiente elemento de la cola sera el nuevo nodo
cola = nuevoNodo; // Y ahora la cola sera el nuevo nodo
}
/**
* Permite borrar un elemento de la lista
* @param elemento
* @return
*/
public boolean borrarElemento(T elemento) {
Nodo
Nodo
while (i != null) { // Recorremos los elementos hasta encontrarlo.
if (elemento.equals(i.getElemento())) {
return eliminar(anterior, i);
} else { //Si no lo encontramos continuamos con el siguiente elemento de la lista
anterior = i;
i = i.getSiguiente();
}
}
return false;
}
/**
* @param anterior
* @param nodoAEliminar
* @return
*/
private boolean eliminar(Nodo
if (anterior == null) { //Asumimos que esta en la cabeza
cabeza = cabeza.getSiguiente();
if (nodoAEliminar.equals(cola)) { //Asumimos que solo hay un elemento en la lista
cola = null;
}
return true;
else { // Asumimos que esta en los nodos interiores
anterior.setSiguiente(nodoAEliminar.getSiguiente());
return true;
}
}
/**
* Permite buscar un elemento
* @param elemento
* @return
*/
return buscar(cabeza, elemento); // Llamamos al metodo recursivo
}
/**
* Funcion recursiva para la busqueda
* @param nodo
* @param elemento
* @return
*/
private boolean buscar(Nodo
if (nodo == null) // Si no hay donde buscar regresamos false
return false;
if (elemento.equals(nodo.getElemento())) // Si lo encontramos regresamos true
return true;
return buscar(nodo.getSiguiente(), elemento); // Si no lo encontramos buscamos en el siguiente
}
public synchronized void imprimirElementos() {
for (Nodo
System.out.print( i.getElemento() + " ");
System.out.println();
}
public static void main(String []args) {
//Probando el codigo
ListaEnlazadaSimple
lista.agregarElemento("Ernesto");
lista.agregarElemento("Maldonado");
lista.agregarElemento("Thomas");
lista.agregarElemento("Ernesto2");
lista.agregarElemento("Maldonado2");
lista.agregarElemento("Thomas2");
lista.borrarElemento("Maldonado");
lista.imprimirElementos();
lista.borrarElemento("Ernesto");
lista.imprimirElementos();
lista.borrarElemento("Thomas2");
lista.imprimirElementos();
System.out.println("Lista contiene \"Thomas\": " + lista.buscar("Thomas"));
System.out.println("Lista contiene \"Hola\": " + lista.buscar("Hola"));
}
}
Bueno por el momento este es el código que ofrezco para que lo analizen, si necesitan ver como se implementa otro metodo a esta lista, solo dejen un comentario y yo lo implemento muchas gracias.
Aqui puede ver como se agrega un elemento a la lista, es un gif simple pero concreto