Si está realmente construir un sistema real, entonces sí, habitualmente se acaba de utilizar el material en la biblioteca estándar si lo que necesita está disponible allí. Dicho esto, no pienses en esto como un ejercicio sin sentido. Es bueno entender cómo funcionan las cosas, y comprender las listas vinculadas es un paso importante hacia la comprensión de estructuras de datos más complejas, muchas de las cuales no existen en las bibliotecas estándar.
Existen algunas diferencias entre la forma en que está creando una lista vinculada y la forma en que lo hace la API de colecciones de Java. La API de colecciones intenta adherirse a una interfaz más complicada. La lista enlazada API Collections es también una lista doblemente enlazada, mientras construyes una lista vinculada individualmente. Lo que estás haciendo es más apropiado para una tarea de clase.
Con su clase LinkedList
, una instancia siempre será una lista de al menos un elemento. Con este tipo de configuración, usaría null
para cuando necesite una lista vacía.
Piense en next
como "el resto de la lista". De hecho, muchas implementaciones similares usan el nombre "cola" en lugar de "siguiente".
Aquí es un diagrama de un LinkedList
que contienen 3 elementos:

Tenga en cuenta que se trata de un objeto LinkedList
apunta a una palabra ("Hola") y una lista de 2 elementos. La lista de 2 elementos tiene una palabra ("Pila") y una lista de 1 elemento. Esa lista de 1 elemento tiene una palabra ("Desbordamiento") y una lista vacía (null
). De modo que puede tratar next
como solo otra lista que resulta ser un elemento más corto.
Es posible que desee agregar otro constructor que solo tome un String, y se establece al lado de null
. Esto sería para crear una lista de 1 elemento.Para agregar, marque si next
es null
. Si es así, cree una nueva lista de elementos y establezca next
.
next = new LinkedList(word);
Si a continuación no es null
, tiene que poner a next
lugar.
next.append(word);
Este es el enfoque recursivo, que es la cantidad mínima de código. Puede convertir eso en una solución iterativa que sería más eficiente en Java *, y no arriesgaría un desbordamiento de la pila con listas muy largas, pero supongo que ese nivel de complejidad no es necesario para su asignación.
* Algunas lenguas tienen la cola eliminación llamada, que es una optimización que permite la implementación del lenguaje convertir "llamadas de cola" (una llamada a otra función que el último paso antes de regresar) en (efectivamente) un " ir". Esto hace que dicho código evite por completo el uso de la pila, lo que lo hace más seguro (no se puede desbordar la pila si no se utiliza la pila) y, por lo general, es más eficiente. Esquema es probablemente el ejemplo más conocido de un idioma con esta característica.
Ok, el enfoque recursivo es lo que necesito, pero no entiendo exactamente cómo funciona. Entonces, si es nulo, entonces la tarea es fácil. Si no es así, volvemos a agregar el siguiente. If next.next == null? No lo entiendo, ¿cómo funciona esto? – Snowman
Si 'next.next == null' significa que el siguiente no era' null'. Entonces llamas a 'next.append (word)'. Ahora estamos en el método 'append' de what-was-'next'. Entonces, lo que ahora llamamos "esto" es lo que anteriormente llamábamos 'siguiente '. Vemos 'next' (que anteriormente llamaríamos' next.next'), y es 'null', por lo que establecemos' next = new LinkedList (word) '. –