2011-01-13 2 views
6

C'è un modo per commutare due elementi in un elenco collegato senza rimuoverli e reinserirli? Il codice Attualmente sto usando è:Passaggio a due elementi in un elenco collegato

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); 
} 

dove matrix è la mia lista collegata.

+6

In Java, LinkedList è una cattiva scelta se si intende accedere agli elementi per indice. Considera ArrayList o Vector. – DwB

risposta

4

Se necessario implementare da soli, questo funzionerà:

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); 
} 

come sarà questo:

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

Il il secondo è simile a come è implementato Collections.swap. Il primo è leggermente più efficiente per una lunga lista collegata.

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