Uso de ListIterator para moverse de un lado a otro en una lista enlazada en Java

Tengo una lista enlazada sobre la que necesito iterar varias veces. Lo estoy utilizando para realizar un seguimiento de una serie de páginas en un flujo de trabajo que se creará de forma dinámica. Esto no se comporta como yo esperaría. Dado este ejemplo:

LinkedList<String> navigationCases;
navigationCases.add("page1");
navigationCases.add("page2");
navigationCases.add("page3");
navigationCases.add("page4");

ListIterator navigationItr = navigationCases.listIterator();
navigationItr.next(); // Returns page1
navigationItr.next(); // Returns page2
navigationItr.previous(); //Returns page2 again
navigationItr.next(); //Returns page2 again

Pensé que tal vez estaba construyendo mi lista incorrectamente, o usando el iterador de forma incorrecta, pero después de leer la documentación, esto parece ser por diseño:

Un ListIterator no tiene ningún elemento actual; su posición del cursor siempre se encuentra entre el elemento que sería devuelto por una llamada a previous () y el elemento que sería devuelto por una llamada a next ().

Y:

(Siguiente) Devuelve el siguiente elemento de la lista. Este método puede llamarse repetidamente para iterar a través de la lista, o entremezclarse con llamadas a la anterior para ir y venir. (Tenga en cuenta que alternar las llamadas a la siguiente y la anterior devolverá el mismo elemento repetidamente).

Entonces, después de leer esto, está claro por qué mi código se comporta de la manera en que lo hace. Simplemente no entiendo por qué debería funcionar de esta manera. Incluso eliminar parece estar doblando hacia atrás para acomodar esta implementación:

Tenga en cuenta que los métodos remove () y set (Object) no están definidos en términos de la posición del cursor; están definidos para operar en el último elemento devuelto por una llamada a next () o previous ().

Conceptualmente, una lista enlazada parecía modelar mis casos de flujo de trabajo bastante bien, pero no puedo usar un iterador que se comporte de esta manera. ¿Me estoy perdiendo algo aquí, o debo escribir mi propia clase para mantener una lista de casos y navegar a través de ellos?

Respuestas a la pregunta(3)

Su respuesta a la pregunta