**Given an array and a value, remove all instances of that value in place and return the new length.
The order of elements can be changed. It doesn’t matter what you leave beyond the new length.**
本题目本意是给出一个数组,然后再给出一个数字,如果给出的数组中存在给出的数字,就把他们全部取出,然后返回新的数组的长度。
题目给了提示,提示可以使用双指针来解决这个问题,即一个指针从前遍历一个指针从后遍历。
下面我们看看代码怎么写:
int removeElement(int* nums, int numsSize, int val) {
int *numsl; /*定义一个新指针,用来存放取入数组的尾指针*/
numsl=nums+numsSize-1; /*将尾指针的值赋给定义好的指针变量*/
int i=0; /*定义整型变量用来存储被取出元素的个数*/
for(int j=0;j<numsSize;j++) /*循环遍历这个数组*/
{
if((*nums)==val) /*此处进行判断,若有相同元素*/
{
*nums=*numsl; /*将尾部元素赋给现指针所指元素*/
numsl--; /*尾指针前移一位*/
i++; /*记录去除元素的个数*/
continue; /*进入下一次循环*/
}
nums++; /*继续向前遍历*/
}
return numsSize-i; /*返回新的数组长度*/
}