Estoy tratando de eliminar los elementos duplicados de una lista enlazada no ordenada en Java (una pregunta de la entrevista Cracking Coding).
Estoy utilizando iteradores anidados en el mismo objeto de lista, pero me da una ConcurrentModificationException
cuando quito un elemento. Este es mi código:
Iterator<String> i = list.iterator();
String curr;
while (i.hasNext()) {
curr = i.next();
Iterator<String> j = list.iterator();
while (j.hasNext()) {
String runner = j.next();
if (curr == runner){
j.remove();
}
}
}
La solución en el libro utiliza un objeto LinkedListNode, lo que hace posible cambiar sólo los punteros de los nodos, pero ¿hay alguna manera de resolver esto utilizando java.util.LinkedList
solamente?
EDITAR : El reto consistía en hacer esto sin usar un buffer temporal, de lo contrario una lista adicional que hacer el truco.
Si no va a usar iteradores o foreach
ciclos, no recibirá ConcurrentModificationException
. Por ejemplo, puede hacerlo de esta manera:
List<Integer> list = new LinkedList<>(Arrays.asList(1, 2, 1, 2, 3));
for (int i = 0; i < list.size() - 1; i++) {
for (int j = i + 1; j < list.size(); j++) {
if (list.get(i).equals(list.get(j))) {
list.remove(j);
j--;
}
}
}
System.out.println(list); // [1, 2, 3]