AcWing 826. 单链表
原题链接
简单
作者:
minux
,
2020-04-22 16:50:57
,
所有人可见
,
阅读 506
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int m;
int e[N]; // 存储节点i的值
int ne[N]; // 存储节点i的next指向的位置
int head; // 头结点下标
int idx; // 当前正在使用的节点下标
void init(){
head=-1;
idx=0;
}
// 头插法
void headIns(int x){
e[idx]=x;
ne[idx]=head;
head=idx;
++idx;
}
// 将x插入到下标为k的点后面
void kIns(int k, int x){
e[idx]=x;
ne[idx]=ne[k];
ne[k]=idx;
idx++;
}
// 删除下标为k的后面的节点
void kRemove(int k){
ne[k]=ne[ne[k]];
}
int main(){
// 使用数组模拟链表
cin>>m;
init();
while(m--){
string P;
cin>>P;
int x, k;
if(P=="H"){
cin>>x;
headIns(x);
}
else if(P=="I"){
cin>>k>>x;
kIns(k-1, x);
}
else if(P=="D"){
cin>>k;
if(!k) head=ne[head]; // 对头结点进行特判
kRemove(k-1);
}
}
for(int i=head; i!=-1; i=ne[i]) cout<<e[i]<<" ";
return 0;
}