好的,所以这个方法的重点是反转类型的ArrayList中的元素。所以,如果我有元素:
5 6 7 8 9 10
一旦我调用该方法,元素的位置应该是反转的:
10 9 8 7 6 5
这是方法,非常感谢任何建议:)。
public void invertElements()
{
for (int i = list.size()-1; i <= -1; i--)
{
int temp = list.get(i);
for(int j = 0; j < list.size()-1; j++)
{
list.set(j, temp);
}
}
}
list是我的ArrayList的名称。
更新:刚试过这种方式:
public void invertElements()
{
int index = 0;
for (int i = list.size()-1; i > -1; i--)
{
int temp = list.get(i);
list.set(index, temp);
index++;
if(index == list.size()-1)
{
break;
}
}
}
给出输出:10,9,8,9,10 有人可以向我解释原因吗?
答案 0 :(得分:0)
您可以在每次迭代时获取列表的末端并交换它们:
ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,8,9,10));
for (int i = 0; i < list.size()/2; i++){
int temp = list.get(i);
int temp2 = list.get(list.size()-1-i);
list.set(i, temp2);
list.set(list.size()-1-i, temp);
}
for(Integer i : list)
System.out.print(i+"-");
给出输出:
10-9-8-7-6-5-4-3-2-1 -
在第一次迭代时:temp = 1 / temp2 = 10
:我们交换它们
在第二次迭代:temp = 2 / temp2 = 9
:我们交换它们
我们循环直到我们遍历列表的所有元素,即列表的大小除以2。
答案 1 :(得分:0)
解决方案
public void invertElems(List<Integer> list) {
for (int i = 0; i < list.size() / 2; ++i) { // we only need iterating half of the size of list
int elem = list.get(i); // we store element in additional variable
list.set(i, list.get(list.size() - i - 1)); // we set i-th elementh with i-th element from the back
list.set(list.size() - i - 1, elem);
}
}
线性时间。随意提问。