数据结构与算法之链表

链表

单向链表

链表设计
链表设计2
链表设计代码1
链表设计代码2
链表设计代码3
链表设计代码4
链表设计代码5
链表设计代码6
链表设计代码7
抽象类(包含边界检查等公共方法)
链表设计代码9

删除链表中的结点
删除链表中的结点

虚拟头结点

虚拟头结点可以使0结点与其它节点统一处理,用作哨兵结点。
哨兵节点,也是头结点,是一个 dummy node. 可以用来简化边界条件,是一个附加的链表节点.该节点作为第一个节点,它的值域不存储任何东西,只是为了操作的方便而引入的。
如果一个链表有哨兵节点的话,那么线性表的第一个元素应该是链表的第二个节点.
使用情况
在很多时候,我们处理某个节点需要用到它的前驱节点。比如删除链表的某个节点,对于没有哨兵的单链表,当待删除的节点为链表的第一个节点,,由于没有前驱,需要进行特殊处理。从而代码的复杂性增加。而如有哨兵节点,则第一个节点的处理方式与其他节点相同,可以统一进行处理。
虚拟头结点.png
虚拟头结点1

虚拟头结点2
虚拟头结点3

三种形式复杂度分析

三种复杂度分析
动态数组add(带索引和元素)复杂度分析
add复杂度分析1
动态数组add(参数只有元素)复杂度分析
此时是向数组末尾添加,涉及扩容问题,适合使用均摊复杂度
add复杂度分析2

两种线性表复杂度分析

双向链表(在单向链表设计的基础上修改)

双向链表
双向链表设计1
双向链表设计2
双向链表设计3
clear后不需要删除中间元素引用,因为非gc root对象会被jvm自动回收
双向链表设计4
双向链表设计5
双向链表设计6
双向链表验证
双向链表与单向链表对比

双向链表与单向链表对比
双向链表官方clear

双向链表官方clear

单向循环链表设计

单向循环链表设计1
单向循环链表设计2

双向循环链表设计

双向循环链表设计1
双向循环链表设计2

约瑟夫问题

循环退出问题

约瑟夫问题1
约瑟夫问题2
约瑟夫问题3

静态链表

静态链表

动态数组优化

动态数组优化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值