0

好的,所以这个方法的重点是反转类型 ArrayList 中的元素<Integer>。所以如果我有这些元素:

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

更新:刚刚尝试过这种方式:

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 有人可以向我解释为什么吗?

4

2 回答 2

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);
  }
}

线性时间。随意问的问题。

于 2014-03-25T12:56:04.017 回答
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。

于 2013-05-21T15:04:10.980 回答