acwing算法基础之数据结构--单链表

目录

  • 1 知识点
  • 2 模板

1 知识点

一般以指针实现为主,可以预生成N个结构体。

struct ListNode {
	int val;
	ListNode *next;
};

但这里以数组模拟为主。

单链表和邻接表。
双链表。

(一)插入操作
链表插入操作的关键步骤,比如在结点a处插入一个新结点b,

  1. 构建结点b,b的next指针指向a的下一个结点。
  2. a的next指针指向b。

注意,必须先进行操作1,再进行操作2。

(二)删除操作
删除结点k的后一个结点,
ne[k] = ne[ne[k]]

2 模板

const int N = 1e5 + 10;
int head; //记录头结点的编号。
int idx; //生成所有结点的编号。
int e[N], ne[N]; //e[i]表示结点i的值,ne[i]表示结点i的next结点编号。

//(1)初始化链表
void init() {
	head = -1;
	idx = 0;
}

//(2)在头结点插入数值x
void head_insert(int x) {
	e[idx] = x, ne[idx] = head, head = idx, idx++;
}

//(3)在结点k后插入数值x
void insert(int k, int x) {
	e[idx] = x, ne[idx] = ne[k], ne[k] = idx, idx++;
}

//(4)删除头结点
void head_remove() {
	head = ne[head];
}

//(5)删除结点k后面的结点
void remove() {
	ne[k] = ne[ne[k]];
}

//(6)遍历当前单链表
for (int i = head; i != -1; i = ne[i]) {
	//i表示结点编号
	//e[i]为结点的值
	cout << e[i] << " ";
}

你可能感兴趣的:(Acwing,数据结构,算法)