尝试理解了一下不知道是不是这样,,,, void func(int* p, int n) { // write your code here...... int *q = p; //指向数组首个元素(当前位置为p[0]) int cnt = 0; for (int i = 0; i < n; i ++){ //数组中有n个元素就遍历n次 if (*p != 0){ //遍历到的当前元素不为0 *q = *p; //把不为0的元素按顺序堆放到数组开头 q ++; //第一个位置被非0数占了,移向下一个待放非0数的位置 cnt ++; //计算非0数的个数 } p ++; //准备检查数组p的下一个元素 } for (int i = cnt; i < n; i ++){ //0的个数为n-cnt,数组后面的空位全留给0 *q = 0; //经过以上循环q已经到了所有非0数后一位空位,直接堆一个0 q ++; //下一个空位准备继续放0 } }
点赞

相关推荐

牛客网
牛客企业服务