AcWing 827. 双链表

实现一个双链表,双链表初始为空,支持5种操作:

(1) 在最左侧插入一个数;

(2) 在最右侧插入一个数;

(3) 将第k个插入的数删除;

(4) 在第k个插入的数左侧插入一个数;

(5) 在第k个插入的数右侧插入一个数

现在要对该链表进行M次操作,进行完所有操作后,从左到右输出整个链表。

  题~目~

#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[cut].pe=x;
    e[e[x].net].pe=cut;
    e[x].net=cut;
    e[cut].v=v;
}
void pop(int x)
{
    e[e[x].net].pe=e[x].pe;
    e[e[x].pe].net=e[x].net; 
}
int main()
{
    scanf("%d",&n);
    e[0].net=cut;
    e[1].pe=0;
    for(int i=1;i<=n;i++)
    {
        string sl;
        int x,y;
        cin>>sl;
        scanf("%d",&x);
        if(sl=="L") push(0,x);
        if(sl=="R") push(e[1].pe,x);
        if(sl=="D") pop(x+1);
        if(sl=="IL"){scanf("%d",&y);push(e[x+1].pe,y);}
        if(sl=="IR"){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;
}

 

上一篇:假装网络工程师28——MPLS跨AS通信optionC方案2


下一篇:如何定投?