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; }