AcWing 826. 单链表
原题链接
简单
作者:
08-69
,
2021-04-10 10:15:25
,
所有人可见
,
阅读 2
#include<bits/stdc++.h>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=100000+10;
int e[N],ne[N],idx,head; //e是值,ne是下一个节点,idx是地址(每个节点的地址不连续但一定不相同),h是头节点(因为是头插法)
void init(){
head=-1;
idx=0;
}
void add_head(int x){ //头插
e[idx]=x;
ne[idx]=head;
head=idx++;
}
void remov(int k){ //删除n后一个节点
ne[k-1] = ne[ne[k-1]];
}
void add(int k,int x){ //n后插入一个值为x的节点
e[idx]=x;
ne[idx]=ne[k-1];
ne[k-1]=idx++;
}
int main()
{
int n,k,x;
cin>>n;
init(); //初始化
for(int i=0;i<n;i++){
char c;
cin>>c;
if(c=='H'){
cin>>x;
add_head(x);
}
if(c=='D'){
cin>>k;
if(k==0) head=ne[head];
remov(k);
}
if(c=='I'){
cin>>k>>x;
add(k,x);
}
}
for(int i=head;i!=-1;i=ne[i]){
cout<<e[i]<<' ';
}
/*int add=head;
cout<<add;
while(add != -1){
cout<<e[add]<<' ';
add=ne[add];
}*/
return 0;
}