acwing 826.单链表
实现一个单链表,链表初始为空,支持三种操作:
(1) 向链表头插入一个数;
(2) 删除第k个插入的数后面的数;
(3) 在第k个插入的数后插入一个数
现在要对该链表进行M次操作,进行完所有操作后,从头到尾输出整个链表。
注意:题目中第k个插入的数并不是指当前链表的第k个数。例如操作过程中一共插入了n个数,则按照插入的时间顺序,这n个数依次为:第1个插入的数,第2个插入的数,…第n个插入的数。
#include<bits/stdc++.h>
#define N 100010
using namespace std;
struct node
{
int pe,net,v;
}e[N];
int n,cut=1;
void push(int x,int v)
{
cut++;
e[cut].net=e[x].net;
e[x].net=cut;
e[cut].v=v;
}
int main()
{
scanf("%d",&n);
e[0].net=cut;
for(int i=1;i<=n;i++)
{
char sl;
int x,y;
cin>>sl;
scanf("%d",&x);
if(sl=='H') push(0,x);
else if(sl=='D'){if(!x)x--;e[x+1].net=e[e[x+1].net].net;}
else {scanf("%d",&y);push(x+1,y);}
}
for(int i=e[0].net;i!=1;i=e[i].net)
printf("%d ",e[i].v);
return 0;
}

浙公网安备 33010602011771号