无论采取什么方式,我该如何做到这一点?我需要一种修改实际列表本身的方法。我尝试过这样做:
// Reverses this list.
public void reverse() {
for (int i = 0, j = size - 1; i < size && j >= 0; i++, j--)
set(i, get(j));
}
...但是我失败了。中途又重新开始,我只是很烂。最终输出为:
List: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
Reversed: [24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
如何避免数字到达中间后重复的问题?谢谢。
最佳答案
当您浏览列表时,您会用末尾的值覆盖前半部分的值,从而丢失那些早期的值。当你到达列表的后半部分时,前半部分的原始值不再存在!
尝试使用交换逻辑(在每次迭代时交换两个元素)并仅遍历列表的一半:
public void reverse() {
int half = size / 2;
for (int i = 0; i < half; i++) {
int j = size - 1 - i; // position of matching element at the other end
T item = get(i); // T is the type of data stored in the list
set(i, get(j));
set(j, item);
}
}
请注意,您不需要将中间元素与其自身交换。
关于java - 反转自己的 Java LinkedList 实现的 Void 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19851599/