首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于逆转Java LinkedList实现的Void方法

用于逆转Java LinkedList实现的Void方法
EN

Stack Overflow用户
提问于 2013-11-08 04:27:10
回答 2查看 445关注 0票数 1

不管怎么做,我怎么能做到?我需要一个修改实际列表本身的方法。我试过这样做:

代码语言:javascript
复制
// Reverses this list.
public void reverse() {
    for (int i = 0, j = size - 1; i < size && j >= 0; i++, j--)
        set(i, get(j));
}

..。但我失败了。一半的时间开始了,我只是在吸。最后的输出是:

代码语言:javascript
复制
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]

当数字到达中间时,我如何避免重复这些数字的问题?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-08 05:22:34

当您浏览列表时,您将从末尾用值覆盖值的前半部分,从而丢失那些早期值。当您到达列表的后半部分时,前半部分中的原始值不再存在!

尝试使用交换逻辑(每次迭代时交换两个元素),并且只在列表的中间进行:

代码语言:javascript
复制
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);
    }
}

请注意,您不需要将中间元素与其本身交换。

票数 1
EN

Stack Overflow用户

发布于 2013-11-08 05:17:35

先生,

我成功地做到了这一点,您可以添加自己的逻辑来减少我使用的for循环。但我希望它能在某种程度上有所帮助。

代码语言:javascript
复制
    for(int i=0;i<list.size()/2;i++) {
        int val = list.removeLast();
        System.out.println("i:" + i + " val " + val);
        reverseList.add(val);
    }

    for(int i=list.size()/2;i<list.size();i++) {
        int val = list.removeLast();
        System.out.println("i:" + i + " val " + val);
        reverseList.add(val);
    }

    for(int i=list.size()/4;i<list.size();i++) {
        int val = list.removeLast();
        System.out.println("i:" + i + " val " + val);
        reverseList.add(val);
    }

    for(int i=list.size()/6;i<list.size();i++) {
        int val = list.removeLast();
        System.out.println("i:" + i + " val " + val);
        reverseList.add(val);
    }

    for(int i=list.size()/8;i<list.size();i++) {
        int val = list.removeLast();
        System.out.println("i:" + i + " val " + val);
        reverseList.add(val);
    }

    for(int i=list.size()/10;i<list.size();i++) {
        int val = list.removeLast();
        System.out.println("i:" + i + " val " + val);
        reverseList.add(val);
    }

    for(int i=list.size()/12;i<list.size();i++) {
        int val = list.removeLast();
        System.out.println("i:" + i + " val " + val);
        reverseList.add(val);
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19851599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档