zoukankan      html  css  js  c++  java
  • 【基础算法】双链表

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

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

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

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

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

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

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

    注意:题目中第k个插入的数并不是指当前链表的第k个数。例如操作过程中一共插入了n个数,则按照插入的时间顺序,这n个数依次为:第1个插入的数,第2个插入的数,…第n个插入的数。

    输入格式

    第一行包含整数M,表示操作次数。

    接下来M行,每行包含一个操作命令,操作命令可能为以下几种:

    (1) “L x”,表示在链表的最左端插入数x。

    (2) “R x”,表示在链表的最右端插入数x。

    (3) “D k”,表示将第k个插入的数删除。

    (4) “IL k x”,表示在第k个插入的数左侧插入一个数。

    (5) “IR k x”,表示在第k个插入的数右侧插入一个数。

    输出格式

    共一行,将整个链表从左到右输出。

    数据范围

    1M1000001≤M≤100000
    所有操作保证合法。

    输入样例:

    10
    R 7
    D 1
    L 3
    IL 2 10
    D 3
    IL 2 7
    L 8
    R 9
    IL 4 7
    IR 2 2
    

    输出样例:

    8 7 7 3 2 9

    代码

    #include<iostream>
    #include<string>
    using namespace std;
    
    const int N = 100010;
    int l[N], r[N], e[N], idx;
    
    //初始化一个链表,没有存任何值
    void init() {
        //0表示左端点,右表示右端点。
        r[0] = 1;
        l[1] = 0;
        idx = 2;
    }
    
    //k的右边插入一个x
    void add(int k, int x) {
        e[idx] = x;
        l[idx] = 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() {
        int m, k, x;
        cin >> m;
        init();
        getchar();
        while (m--) {
            string op;
            cin >> op;
            if (op == "L") {
                cin >> x;
                add(0, x);
            }
            else if (op == "R") {
                cin >> x;
                add(l[1], x);
            }
            else if (op == "D") {
                cin >> k;
                remove(k + 1);
            }
            else if (op == "IL") {
                cin >> k >> x;
                add(l[k+1], x);
            }
            else if (op == "IR") {
                cin >> k >> x;
                add(k+1, x);
            }
        }
    
        for (int i = r[0];i != 1;i = r[i]) cout << e[i] << " ";
        return 0;
    }


  • 相关阅读:
    WML1.1[zt]
    Collections sort() 合并排序
    PowerBuliderconnect the oracle database
    window.location.reload;刷新
    PowerBuliderWorking with validation rules
    PowerBulider create database
    Jstl Core标签
    页面验证
    El表达式详解
    servlet的生命周期
  • 原文地址:https://www.cnblogs.com/Attacking-vincent/p/12965958.html
Copyright © 2011-2022 走看看