0
public static ArrayList<Integer> reverse (ArrayList<Integer> n) {
    ArrayList<Integer> result = new ArrayList<Integer>();

    for(int i = 0; i < n.size(); i++) {
        int j = n.size() - i - 1; 
        result.add(i, n.get(j));
    }

    return result;
}

但是如果我输入一个数组1,2,3,4,5,6,7,8,9,10 ,结果是10,9,8,7,6,5,4,3,2,10

我的错误在哪里?

4

4 回答 4

4

实际上,您所拥有的一切都很好。但是您可以for通过“向后”迭代来简化 -loop:

for(int i = n.size() - 1 ; i >= 0 ; i--)
    result.add(n.get(i));

哦,还有一件事我应该提到。当您声明 listresult时,您可能想要指定它的容量,因为您知道它将是什么。IE:

ArrayList<Integer> result = new ArrayList<Integer>(n.size());
于 2012-11-03T00:31:14.257 回答
3

使用n.size() / 2交换(尽可能少)并以线性时间运行。

public static ArrayList<Integer> reverse (ArrayList<Integer> n)
{
    for (int i = 0, j = n.size() - 1, t; i <= size / 2; ++i, --j)
    {
        t = n.get(i);
        n.set(i, n.get(j));
        n.set(j, t);
    }
    return n;
}
于 2012-11-03T00:42:02.977 回答
0

Collections.reverse(arrayList);

如果你还想买手动的,

     public ArrayList<Integer> reverse(ArrayList<Integer> arrayList) {
        ArrayList<Integer> result = (ArrayList<Integer>)list.clone();
        for (int start=0,end=result.size()-1;start<end;start++,end--) {
           swap(result,start,end) ;
        }
        return result;
     }
     public void swap(ArrayList<Integer> temp, int front, int back) {
        Integer i = temp.set(front,temp.get(back)) ;
        temp.set(back, i) ;
     }
于 2012-11-03T00:26:17.140 回答
0

它不适用于具有偶数个项目的列表

于 2015-12-15T07:51:55.187 回答