2011-01-13 18 views
6

¿Hay alguna forma de cambiar dos elementos en una lista vinculada sin quitarlos ni volver a insertarlos? El código que estoy usando actualmente es:Cambiar dos elementos en una lista vinculada

void exchange(int i, int j) { 
    int[] temp = matrix.get(i); 
    matrix.remove(i); 
    matrix.add(i, matrix.get(j - 1)); 
    matrix.remove(j); 
    matrix.add(j, temp); 
} 

donde matrix es mi lista enlazada.

+6

En Java, LinkedList es una mala elección si tiene la intención de acceder a los elementos por índice. Considera ArrayList o Vector. – DwB

Respuesta

4

Si debe aplicar por sí mismo, esto va a funcionar:

void exchange(int i, int j) { 
    ListIterator<int[]> it1 = matrix.listIterator(i), 
         it2 = matrix.listIterator(j); 
    int[] temp = it1.next(); 
    it1.set(it2.next()); 
    it2.set(temp); 
} 

al igual que esta:

void exchange(int i, int j) { 
    matrix.set(i, matrix.set(j, matrix.get(i))); 
} 

El el segundo es similar a cómo se implementa Collections.swap. El primero es ligeramente más eficiente para una larga lista vinculada.

3
matrix.set(i, matrix.set(j, matrix.get(i))); 
Cuestiones relacionadas