• AcWing 827. 双链表


    https://www.acwing.com/problem/content/829/

    #include <iostream>
    using namespace std;
    const int N = 100010;
    
    int m;
    int e[N], l[N], r[N], idx;  //e表示这个点的值是多少,l表示这个点左边的点的编号,r表示这个点右边的点的编号 
    
    // 在节点a(编号)的右边插入一个数x   idx也是编号 
    void insert(int a, int x) {
        e[idx] = x;//先在idx记录这个值 
        l[idx] = a;//左边是a 
        r[idx] = r[a];//右边是r【a】 
        l[r[a]] = idx;//让原来a的右边的数的左边变为idx 
        r[a] = idx ++ ;//a的右边 
    }
    
    // 删除节点a
    void remove(int a) {
        l[r[a]] = l[a];//a左边的点的编号,变为a右边的点的编号 
        r[l[a]] = r[a];//a右边的点的编号,变为a左边的点的编号 
    }
    
    int main() {
        cin >> m;
        // 0是左端点,1是右端点
        r[0] = 1, l[1] = 0;
        idx = 2;
        while (m -- ) {
            string op;
            cin >> op;
            int k, x;
            if (op == "L") {//l表示在最左端插入数x 
                cin >> x;
                insert(0, x);//相当于在0的右边插入X 
            } else if (op == "R") {//在最右端插入X 
                cin >> x;
                insert(l[1], x);
            } else if (op == "D") {
                cin >> k;
                remove(k + 1);
            } else if (op == "IL") {
                cin >> k >> x;
                insert(l[k + 1], x);
            } else {
                cin >> k >> x;
                insert(k + 1, x);
            }
        }
    
        for (int i = r[0]; i != 1; i = r[i]) cout << e[i] << ' ';
        cout << endl;
    
        return 0;
    }
  • 相关阅读:
    js计算两个时间相差天数
    享元模式
    外观模式
    组合模式
    装饰者模式
    桥接模式
    适配器模式
    元素量词 ? + *
    linux安装使用7zip
    linux shell使用别名,切换当前目录
  • 原文地址:https://www.cnblogs.com/QingyuYYYYY/p/11790098.html
Copyright © 2020-2023  润新知