天天看點

ACWING 827. 雙連結清單 (連結清單)

ACWING 827. 雙連結清單 (連結清單)
https://www.acwing.com/problem/content/829/
#include<iostream>
using namespace std;

const int N=100010;
int l[N],r[N],e[N];
int idx,m;

void init() {
    l[1]=0;
    r[0]=1;
    idx=2;

}

void add(int k, int x) {
    e[idx]=x;
    l[idx]=l[r[k]];
    r[idx]=r[k];

    l[r[k]]=idx;
    r[k]=idx++;

}

void remove(int k) {
    r[l[k]]=r[k];
    l[r[k]]=l[k];

}

int main() {

    init();
    cin>>m;

    char c;
    int k,x;
    int n=m;
    while(n--) {
        cin>>c;

        if(c=='R') {
            cin>>x;
            add(l[1],x);

        } else if(c=='L') {
            cin>>x;
            add(0,x);

        } else if(c=='D') {
            cin>>k;
            remove(k+1);


        } else {
            cin>>c>>k>>x;
            if(c=='L') add(l[k+1],x);
            else add(k+1,x);

        }

    }

    for(int i=r[0]; i!=1; i=r[i]) cout<<e[i]<<' ';
    cout<<'\n';

    return 0;
}

           

繼續閱讀