《蓝桥杯预备专题》每日算法_双链表

97 阅读1分钟

题目描述

在这里插入图片描述

解题思路

  • 无须设计五个方法对应五种操作,将所有插入操作归为一类,删除为一个单独操作即可

代码部分

import java.util.*;

public class Main{
    
    public static final int N = 100010;
    // 三个数组,当前元素、前指针、后指针
    public static int [] e = new int[N];
    public static int [] l = new int[N];
    public static int [] r = new int[N];
    // 下一个可用的索引
    public static int idx = 2;
    
    
    public static void main(String [] args){
        l[1] = 0; r[0] = 1;
        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt();
        for(int i = 0; i < m; i++){
            String s = sc.next();
            char c = s.charAt(0);
            int x, k;
            // 判断是哪种操作
            if(c == 'L'){
                x = sc.nextInt();
                insert(0, x);
            }else if(c == 'R'){
                x = sc.nextInt();
                insert(l[1], x);
            }else if(c == 'D'){
                k = sc.nextInt();
                remove(k + 1);
            }else if(s.charAt(1) == 'L'){
                k = sc.nextInt();
                x = sc.nextInt();
                insert(l[k + 1], x);
            }else{
                k = sc.nextInt();
                x = sc.nextInt();
                insert(k + 1, x);
            }
        }
        for(int i = r[0]; i != 1; i = r[i]){
            System.out.print(e[i] + " ");
        }
    }
    
    // 删除
    public static void remove(int k){
        r[l[k]] = r[k];
        l[r[k]] = l[k];
    }
    
    // 插入
    public static void insert(int k, int x){
        e[idx] = x;
        r[idx] = r[k];
        l[idx] = k;
        l[r[k]] = idx;
        r[k] = idx;
        idx++;
    }
    
}