java - 反转自己的 Java LinkedList 实现的 Void 方法

标签 java linked-list

无论采取什么方式,我该如何做到这一点?我需要一种修改实际列表本身的方法。我尝试过这样做:

// 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/

相关文章:

java - Java Netbeans 项目中的哪些文件应置于版本控制之下?

Java 主类在运行时重写属性文件

java - JScrollPane 无法正常工作

javascript - 使用 Spring 的静态 Assets 缓存

c - 删除整个链表 C

C:链表变量未初始化

java - 被调用者认识调用者吗?

c - 在 C 中使用 "fscanf"如何拆分两个字符串?

java - 将链表的头部移动到尾部

java - 如何访问另一个程序中已经构建的链表?