题目来源于力扣–https://leetcode-cn.com/
将数组中的零元素移动到数组末尾,非零元素相对的顺序不会被改变。
将非零元素往前移,使用两个指针,i指针,j指针,初始化指在数组首位,i所指的位置是可以被替换的位置,当j指针所指元素不为0时,将j所指位置的元素赋值给i所指的位置,i++,j++,否则为0时,i不动,j++。
main函数下的代码
#include<stdio.h>
void moveZeroes(int* nums, int numsSize);
int main(){
int nums[5] = {0,1,0,3,12};
moveZeroes(nums,5);
for(int i=0;i<5;i++){
printf("%d ",nums[i]);
}
return 0;
}
移动非零元素的代码
void moveZeroes(int* nums, int numsSize){
// 将非零元素往前移,i指针,j指针,遇到0元素i指针不动,j指针往后走,如果j所指的元素不等于0,替换掉i位置的0元素,i++,j++,
// i的位置一直是可以替换的位置,指到j走完数组,i所在的位置就是要全部替换成0的位置
int i = 0;
for(int j=0;j<numsSize;j++){
if(nums[j]!=0){
nums[i++] = nums[j];
}
}
for(i;i<numsSize;i++){
nums[i] = 0;
}
}