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

 

posted @ 2020-12-18 16:13  君与  阅读(73)  评论(0编辑  收藏  举报