题目描述
第一行包含整数 M
,表示操作次数。
接下来 M
行,每行包含一个操作命令,操作命令可能为以下几种:
H x,表示向链表头插入一个数 x
。
D k,表示删除第 k
个插入的数后面的数(当 k
为 0
时,表示删除头结点)。
I k x,表示在第 k
个插入的数后面插入一个数 x
(此操作中 k
均大于 0
)。
样例
#include<iostream>
using namespace std;
const int N = 1E6+10;
int n;
int head,e[N],ne[N],idx;
//一开始head指向空:-1
void init(){
head = -1;
idx = 0;
}
void add_to_head(int x){
ne[idx] = head;
e[idx] = x;
head = idx ++;
}
void add(int k,int x){
ne[idx] = ne[k];
ne[k] = idx;
e[idx] = x;
idx ++;
}
void remove(int k){
ne[k] = ne[ne[k]];
}
int main(){
int k,x;
char a[2];//chat a;
//这里改成数组读入字符串可以防止读入空格//换行等杂七杂八的字符
init();
scanf("%d",&n);
while(n--){
scanf("%s",a);//scanf("%s",&a);
if(*a == 'H'){//if(a == 'H')
//*a = a[0];*(a + 1) = a[1];
scanf("%d",&x);
add_to_head(x);
}
else if(*a == 'D'){//else if(a == 'D')
scanf("%d",&k);
if(!k) head = ne[head];
else remove(k - 1);
}
else{
scanf("%d%d",&k,&x);
add(k-1,x);
}
}
for(int i = head;i != -1; i = ne[i] ){
cout << e[i] << " ";
}
cout <<endl;
}
算法1
(暴力枚举) $O(n^2)$
blablabla
时间复杂度
参考文献
C++ 代码
blablabla
算法2
(暴力枚举) $O(n^2)$
blablabla
时间复杂度
参考文献
C++ 代码
blablabla