题目描述
长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,删除线性表中所有值为x的数据元素。
输入
输入包含一个整数n代表顺序表L长度,一个x代表要删除的元素。
接下来包含n个整数,代表顺序表L中的元素。
输出
输出删除元素x后的顺序表。
样例输入
5 2
1 3 2 5 2
样例输出
1 3 5
代码:
cpp
#include<bits/stdc++.h>
using namespace std;
bool Delete_x(vector<int> &a, int &len, int x){//删除线性表中所有值为x的元素
if(a.empty()==true){
return false;
}
int count = 0;//用于记录值为x的元素个数
for(int i=0;i<len;++i){
if(a[i]==x){
count++;
}
else{
a[i-count]=a[i];//当前位置元素向前移动k个位置
}
}
len = len - count;
return true;
}
int main(){
int n,x;//n为顺序表长度,x为要删除的元素的值
scanf("%d %d",&n,&x);
int len = n;
vector<int> a(n);
for(int i=0;i<len;++i){
scanf("%d",&a[i]);
}
if(Delete_x(a,len,x)==true){
for(int i=0;i<len;++i){
printf("%d ",a[i]);
}
}
else{
printf("ERROR\n");
}
return 0;
}