码迷,mamicode.com
首页 > 其他好文 > 详细

【链表】链表的理论基础

时间:2021-02-08 11:44:41      阅读:0      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!