数组写双链表

题目
AC代码:

package 练习;
import java.util.*;
import java.io.*;
import java.lang.*;
import java.util.*;
public class Main {
	static Scanner scanner=new Scanner(System.in);
	static int l[],r[];//
	static int value[];
	static Set<Integer>set=new HashSet<Integer>();
	public static void main(String[] args) {
		int n=scanner.nextInt();
		int x=0;
		l=new int [n];
		r=new int [n];
		value=new int [n];
		while(n-->0) {
			String string=scanner.next();
			if(string.equals("L")) {
				addL(scanner.nextInt(), ++x);
			}else if(string.equals("R")) {
				addR(scanner.nextInt(), ++x);
			}else if(string.equals("IL")) {
				addIL(scanner.nextInt(), scanner.nextInt(), ++x);
			}else if(string.equals("IR")) {
				addIR(scanner.nextInt(), scanner.nextInt(), ++x);
			}else {
				D(scanner.nextInt());
			}
		}
//		addR(8, 1);
//		addR(5, 2);
//		addL(4, 3);
//		addIL(3, 3, 4);
		//addIR(2, 8, 5);
		StringBuilder stringBuilder=new StringBuilder();
		//System.out.println(LNO);
		int xx=LNO;
		while(value[xx]!=0) {
			if(!set.contains(xx))stringBuilder.append(value[xx]+" ");
			xx=r[xx];
		}
		System.out.println(stringBuilder);
	}
	static int RNO;//记录最后一个
	static int LNO;//记录第一个
	public static void addL(int x,int NO) {
		value[NO]=x;
		l[LNO]=NO;//第一个的前面为最新的
		r[NO]=LNO;
		LNO=NO;
		if(NO==1)RNO=1;
	}
	public static void addR(int x,int NO) {
		value[NO]=x;
		r[RNO]=NO;//最后一个等于新的
		l[NO]=RNO;
		RNO=NO;
		if(NO==1)LNO=1;
	}
	public static void addIL(int k, int x,int NO) {
		if(k==LNO)addL(x, NO);
		else {
			value[NO]=x;
			l[NO]=l[k];//node.l=nownode.l
			r[NO]=k;//node.r=nownode
			r[l[k]]=NO;//nownode.l.r=node
			l[k]=NO;//nownode.l=node
		}
	}
	public static void addIR(int k,int x,int NO) {
		if(k==RNO)addR(x, NO);
		else {
			value[NO]=x;
			l[NO]=k;
			r[NO]=r[k];
			l[r[k]]=NO;
			r[k]=NO;
		}
	}
	public static void D(int k) {
		set.add(k);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值