有没有一种方法可以在不删除和重新插入的情况下交换链表中的两个元素?我目前使用的代码是:
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
是我的链表。
有没有一种方法可以在不删除和重新插入的情况下交换链表中的两个元素?我目前使用的代码是:
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
是我的链表。
Collections#swap()
对于链表而言是2倍的 *O(n)*。请参见 LinkedList#entry(int)
,它被 LinkedList#set(int, T)
使用。这很遗憾。 - sehvoid 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
。第一种方法对于长链表略微更有效率。matrix.set(i, matrix.set(j, matrix.get(i)));