标签:struct ola 约瑟夫 一个 next 复杂度 block 如图所示 节点
链表结构
链表中的节点由数据域和指针域两部分组成。
//golang中单链表节点的定义
type ListNode struct{
Val int //数据域
Next *ListNode //指针域
}
链表的分类
链表的入口处称为链表的头节点head,链表的尾节点指向null。
单链表中的节点只能指向节点的下一个节点。
双链表,顾名思义,当前节点既可以连接下一个节点,也可以指向上一个节点。
顾名思义,链表的首尾相连。循环链表可以解决约瑟夫环问题。
链表的增删操作
将节点D从链表中删除,如图所示:
注:这里咱们简化将数据域中的值C就表示为该节点,这样容易看
即当前节点C指向待删除节点D的下一个节点E,这里不用担心被删除的节点D还留在内存中(如果是C/C++则需要手动回收节点D),因为类似Java,Python还有Golang语言有自带的GC(垃圾回收机制),无须我们手动操作。
//代码操作如下
C.Next = C.Next.Next
向链表中增加节点F,如下图:
//代码操作如下
F.Next = C.Next
C.Next = F
链表和数组的对比
存储方式 | 查询时间复杂度 | 增删时间复杂度 | 适用场景 | |
---|---|---|---|---|
数组 | 在内存中连续存储 | O(1) | O(n) | 数据量固定,频繁查询,较少的增删 |
链表 | 在内存中分散存储 | O(n) | O(1) | 数量不固定,频繁增删,较少的查询 |
链表的基础知识就到这里啦~ 后续大家为大家介绍链表的常见题型。
标签:struct ola 约瑟夫 一个 next 复杂度 block 如图所示 节点
原文地址:https://www.cnblogs.com/zmk-c/p/14381423.html