单链表:邻接表。邻接表可以用来存储数和图
用数组模拟单链表。面试中多用动态链表,笔试中new Node节点很慢,一般不用动态链表而使用数组模拟单链表。用数组e[]来存储元素的值,数组ne[]存储元素的下一个节点的下标。数组e和数组ne之间通过下标联系起来。用-1来表示null
变量idx存储当前已经用到了哪个节点。变量head保存头节点的下标。
import java.util.*;
public class Main{
static int N = 100010;
static int[] e = new int[N],ne = new int[N];
static int head = -1,idx = 0;;
public static void main(String[] args) {
Scanner sc = new Scanner (System.in);
int x = 0,k = 0;
char op = 'a';
int m = sc.nextInt();
for(int i = 0;i<m;i++) {
op = sc.next().charAt(0);
if (op == 'H') {
x = sc.nextInt();
add_to_head(x);
} else if (op == 'D') {
k = sc.nextInt();
remove(k);
} else {
k = sc.nextInt();
x = sc.nextInt();
insert(k,x);
}
}
for(int i = head;i != -1;i = ne[i]) {
System.out.print(e[i] + " ");
}
}
public void init() {
}
public static void add_to_head(int x) {
e[idx] = x;
ne[idx] = head;
head = idx;
idx++;
}
//移除第k个插入的数后面的数
public static void remove(int k) {
if (k == 0) {
head = ne[head];
} else {
ne[k - 1] = ne[ne[k - 1]];
}
}
//在第k个插入的数后插入一个数
public static void insert(int k,int x) {
e[idx] = x;
ne[idx] = ne[k - 1];
ne[k - 1] = idx;
idx++;
}
}