题目来自Acwing 826
实现一个单链表,链表初始为空,支持三种操作:
- 向链表头插入一个数;
- 删除第 k 个插入的数后面的数;
- 在第 k 个插入的数后插入一个数。
图示
变量表示
用来表示头节点
用来储存每个节点的值
用来表示 下一节点的下标值
用来标记下一节点的位置
初始化
三个操作
1. 从头节点插入
func addToHead(x int) {
val[index] = x // 在 val 中存入 x 的值
next[index] = head // 由于是头节点插入,所以该地址的下一节点应该指向旧的头节点
head = index // 更新头节点
index ++ // 更新下标
}
2. 在第 k 个数后面插入数字 x
func add(x int, k int) {
k -- // 取得第 k 个数第下标位置
val[index] = x // 添加数字总是在数组后
next[index] = next[k] // 需要将当前插入的数字下一节点指向第 k 个节点的下一节点
next[k] = index // 将第 k 个节点的下一节点指向新插入的节点
index++ // 更新下标
}
3.删除第 k 个数后面的一个数
func remove(k int) {
k --
next[k] = next[next[k]] // 将第 k 个节点的下一节点更新为其后一节点的再后一节点
}