数组模拟单链表:
用的最多的是邻接表--就是多个单链表:
作用:存储树与图
为什么需要使用数组模拟链表
1. 比使用结构体 或者类来说 速度更快
2. 代码简洁
3. 算法题:空间换时间
[题目详情](https://www.acwing.com/solution/content/3472/)
图解:
需要明确相关定义:
head存储链表头,e[]存储节点的值,ne[]存储节点的next指针,idx表示当前用到了哪个节点
import java.util.*;
public class Main{
static int N = 100010;
static int idx,head;
static int[] e = new int[N];
static int[] next = new int[N];
// 初始化
static void init(){
head = -1;
idx = 0;
}
// 向链表头插入一个数
static void insertHead(int x){
e[idx] = x;
next[idx] = head;
head = idx++;
}
// 向k位置插入x
static void insert(int k,int x){
e[idx] = x;
next[idx] = next[k];
next[k] = idx++;
}
// 删除k位置的数
static void delete(int k){
next[k] = next[next[k]];
}
// 主函数
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
init();
int n = sc.nextInt();
while(n-- != 0){
String s = sc.next();
if(s.equals("H")){
int x = sc.nextInt();
insertHead(x);
}else if(s.equals("D")){
int k = sc.nextInt();
if(k == 0) head=next[head];
else delete(k-1);
}else if(s.equals("I")){
int k = sc.nextInt();
int x = sc.nextInt();
insert(k-1,x);
}
}
for(int i =head;i != -1;i=next[i]){
System.out.print(e[i]+" ");
}
}
}