You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现List反转的代码为何无法正常运行?

代码无法正确运行的原因

这段反转List的代码核心错误是把存储列表初始长度的变量n同时作为循环终止判断依据、右索引计算基准,还在循环内执行n--修改边界值,导致循环提前终止,部分偶数长度的列表会出现中间元素未交换的问题,反转结果不符合预期。

以长度为6的输入列表[1,2,3,4,5,6]为例,代码实际执行流程如下:

  • 初始n=6,循环变量i从0开始
  • i=0时,满足i < 6/2=3的循环条件:交换索引0和索引5的元素,列表变为[6,2,3,4,5,1],执行n--后n=5
  • i=1时,满足i < 5/2=2.5的循环条件:交换索引1和索引4的元素,列表变为[6,5,3,4,2,1],执行n--后n=4
  • i=2时,判断i < 4/2=2不成立,循环直接结束
  • 最终返回结果为[6,5,3,4,2,1],中间位置的3和4没有完成交换,反转失败。
修正后的实现

两种无bug的实现方式可选:

方案1:保留原循环结构,移除循环内对n的修改

不需要动态修改n,右索引直接通过初始长度计算即可:

import java.util.List;
public class Main{
    public static List<Integer> reverseArray(List<Integer> a){
        int n = a.size();
        int temp;
        for (int i = 0; i < n/2; i++){
            int rightIndex = n - 1 - i;
            temp = a.get(rightIndex);
            a.set(rightIndex, a.get(i));
            a.set(i, temp);
        }
        return a;
    }
}

方案2:双指针写法,逻辑更直观

单独定义左右指针,移动逻辑和循环条件完全解耦,不容易出边界错误:

import java.util.List;
public class Main{
    public static List<Integer> reverseArray(List<Integer> a){
        int left = 0;
        int right = a.size() - 1;
        int temp;
        while (left < right){
            temp = a.get(right);
            a.set(right, a.get(left));
            a.set(left, temp);
            left++;
            right--;
        }
        return a;
    }
}

内容的提问来源于stack exchange,提问作者Youssef Sultan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 17:18:20