Cómo eliminar elementos de LinkedList con iteradores anidados en java

user1796659:

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 ConcurrentModificationExceptioncuando 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.LinkedListsolamente?

EDITAR : El reto consistía en hacer esto sin usar un buffer temporal, de lo contrario una lista adicional que hacer el truco.

Golov Pavel:

Si no va a usar iteradores o foreachciclos, 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]

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=207397&siteId=1
Recomendado
Clasificación