Переключение двух элементов в связанном списке - PullRequest
6 голосов
/ 13 января 2011

Есть ли способ переключить два элемента в связанном списке без их удаления и повторной вставки? Код, который я сейчас использую:

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

где matrix - мой связанный список.

Ответы [ 3 ]

5 голосов
/ 13 января 2011

Используйте метод обмена в объекте Коллекции: http://download.oracle.com/javase/6/docs/api/java/util/Collections.html#swap%28java.util.List,%20int,%20int%29

4 голосов
/ 13 января 2011

Если вы должны реализовать это самостоятельно, это будет работать:

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

, как будет это:

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

Второй аналогичен тому, как Collections.swap реализовано.Первый вариант немного длиннее для длинного связанного списка.

3 голосов
/ 13 января 2011
matrix.set(i, matrix.set(j, matrix.get(i)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...