单链表 邻接表实现 Go

250 阅读1分钟

题目来自Acwing 826

实现一个单链表,链表初始为空,支持三种操作:

  1. 向链表头插入一个数;
  2. 删除第 k 个插入的数后面的数;
  3. 在第 k 个插入的数后插入一个数。

图示

变量表示

headhead用来表示头节点

val[x]val[x] 用来储存每个节点的值

next[x]next[x] 用来表示 val[x]val[x] 下一节点的下标值

indexindex用来标记下一节点的位置

初始化

三个操作

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 个节点的下一节点更新为其后一节点的再后一节点
}