题目描述
-
scanf("%c",&ch);
不能用,怪事! -
小心删除头结点的细节;
-
插入时,先连接,后断开;
C++ 代码
#include<iostream>
using namespace std;
#define read(x) scanf("%d",&x)
const int N=1e5+3;
int head=-1;
int idx,e[N],ne[N];
void add(int x){
e[idx]=x,ne[idx]=head,head=idx++;
}
void addk(int k,int x){
e[idx]=x,ne[idx]=ne[k-1],ne[k-1]=idx++;
}
void del(int k){
if(!k) {//删除头结点
head=ne[head];return;
}
ne[k-1]=ne[ne[k-1]];
}
int main(){
int m;read(m);
while(m--){
int x,k;
char ch;
cin>>ch;
if(ch=='I'){
read(k),read(x),addk(k,x);
}else if(ch=='D'){
read(k),del(k);
}else{
read(x),add(x);
}
}
for(int i=head;i!=-1;i=ne[i]) printf("%d ",e[i]);
return 0;
}