1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 class moveZeroes { public static void moveZeroes(int[] nums){ //快慢指针的思想和removeElement这一题有着异曲同工之妙 int i=0,j=0;//i是慢指针 指向第一个0,j是快指针 指向第一个非0 for(;;i++){ if(nums[i]==0)break;//虽然我也觉得这里的循环写得很奇怪,但是思想还是很清晰的:第一个找到0!!如果出界就退出 if(i+1==nums.length) return; } j=i+1;//j是从i右边开始起步的 for (;;j++){ if(j>=nums.length) return; if(nums[j]!=0)break; } // System.out.println(i+"j"+j+"----------"); for(;j<nums.length;j++){ if(nums[j]!=0){ if(nums[j]!=0){ nums[i]=nums[j]; nums[j]=0; i++; } } } } public static void main(String[] args) { int []nums={0,0}; moveZeroes(nums); for(int i=0;i<nums.length;i++){ System.out.println(nums[i]); } } }