数据结构和算法-链表

86 阅读1分钟

定义

链表是一种线性表结构,它使用由指正串联的非连续的内存空间,存储相同类型的数据。

算法

随机访问

不支持

查找节点

type Node struct {
    Val int
    Next *Node
}

func find(head *Node, target int) *Node {
    p := head
    for p != nil {
        if p.Val == target {
            return p
        }
    }
    return nil
}
  • 时间复杂度:O(n)
  • 时间复杂度:O(1)

删除节点

前提:通过查找算法已经拿到前置指针

func delete(pre *Node) {
    pre.Next = pre.Next.Next
}
  • 时间复杂度:O(1)
  • 时间复杂度:O(1)

插入节点

前提:通过查找算法已经拿到前置指针

func insert(pre *Node, node *Node) {
    node.Next = pre.Next
    pre.Next = node
}
  • 时间复杂度:O(1)
  • 时间复杂度:O(1)

优点和缺点

优点

  • 天然支持自动扩容

缺点

  • 无法支持随机访问

变体

单链表是链表最基本的结构,除此之外常见的链表还有以下几种

  • 循环链表
  • 双向链表
  • 循环双向链表