以下是我的代码:
int i,j;
for (j=0;j<L->length;j++)
{
if(L->data[j]%2!=0)
{
for(i=j;i<L->length;i++)
{
L->data[i]=L->data[i+1];
}
L->length--; //顺序表长度减1
}
}
如果我输入“1 2 3 4 5”就能够把1、3、5去掉,但是“1 2 3 5 6”就不能。也就是如果每个奇数之间夹着一个偶数,就能把奇数全部删掉;但是如果奇数连在一起,就不可以,请教下为什么
因为你的程序中的每删除一个奇数后,就把后面全部往前移动一格,因此后面紧接着的奇数就被移动到现在的j下标,但是后面的循环直接j++,就从后一个位置开始了,所以漏掉了这个
如果是奇数的间隔大于等于1就不会出现这个问题,改改就可以了:
int i,j;
for (j=0;j<L->length;j++)
{
if(L->data[j]%2!=0)
{
for(i=j;i<L->length;i++)
{
L->data[i]=L->data[i+1];
}
L->length--; //顺序表长度减1
//这里加上一句:
j --; //为了继续删除掉移动到该位置后面紧接着的奇数
}
}
如果是奇数的间隔大于等于1就不会出现这个问题,改改就可以了:
int i,j;
for (j=0;j<L->length;j++)
{
if(L->data[j]%2!=0)
{
for(i=j;i<L->length;i++)
{
L->data[i]=L->data[i+1];
}
L->length--; //顺序表长度减1
//这里加上一句:
j --; //为了继续删除掉移动到该位置后面紧接着的奇数
}
}
温馨提示:答案为网友推荐,仅供参考