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
我的错误在哪里?
答案 0 :(得分:4)
实际上,你在那里工作得很好。但是你可以通过迭代'向后'来简化你的for
循环:
for(int i = n.size() - 1 ; i >= 0 ; i--)
result.add(n.get(i));
哦,还有一件事我应该提一下。声明列表result
时,您可能希望指定其容量,因为您知道它的内容。即:
ArrayList<Integer> result = new ArrayList<Integer>(n.size());
答案 1 :(得分: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;
}
答案 2 :(得分: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) ;
}
答案 3 :(得分:0)
它不适用于包含偶数项目的列表