【问题标题】:Switching two elements in a Linked List切换链表中的两个元素
【发布时间】:2025-11-29 08:20:01
【问题描述】:

有没有办法切换链表中的两个元素而不删除和重新插入它们?我目前使用的代码是:

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 是我的链表。

【问题讨论】:

  • 在 Java 中,如果您打算按索引访问元素,LinkedList 是一个糟糕的选择。考虑 ArrayList 或 Vector。

标签: java linked-list


【解决方案1】:

【讨论】:

  • 我该如何实施?
  • Collections.swap(matrix, i, j)
  • 不幸的是,Collections#swap() 是链表的 2x O(n)。请参阅LinkedList#entry(int),由LinkedList#set(int, T) 使用。真可惜。
【解决方案2】:

如果您必须自己实现它,这将起作用:

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】:
    matrix.set(i, matrix.set(j, matrix.get(i)));
    

    【讨论】:

      最近更新 更多