线性表之循环链表

==> 学习汇总(持续更新)
==> 从零搭建后端基础设施系列(一)-- 背景介绍


**基本思想:**在单链表的基础上,让最后一个节点指向头节点,还可以添加一个尾指针,指向最后一个节点,方便合并两个链表。

**优点:**可以在任意地方遍历到指定的节点。

**缺点:**和单链表的缺点一样。

C代码实现下载
C++代码实现下载
java代码实现下载
(备用下载地址)

如果不加入尾指针,那循环链表的所有操作都和单链表一样一样的,只要把最后一个节点指向头节点即可。

如图:

加上尾指针后,难点在于,如何保持尾指针一定指向最后一个节点。解决办法就是,头添加的时候,判断一下链表是否为空,如果为空,则让尾指针指向第一个节点,以后当新的节点以头添加方式添加进来的时候,都不会改变尾指针的指向。若是尾添加方式,则第一次添加的时候调用头添加函数即可,接下来,直接挂在最后一个节点处,修改尾指针指向。(因为尾指针指向最后一个节点,所以相当于,不用遍历,即可获取得到最后一个节点)

如图:
头添加

尾添加

关于两个表的合并,其实很简单,修改一下尾指针的指向即可,就是让表1的最后一个节点指向表2的第一个节点,表2的最后一个节点指向表1的头节点。但是这样做,效率是上来了,时间复杂度只有0(1),但是这样合并后,表2会受表1的影响,因为它们拥有一块共同的地址空间。如果想合并后,两个表完全无影响,那就只有先把表2复制一份,然后再合并。这样,时间复杂度就变为0(n)了,主要看的是表2的大小。

如图:

最后就是遍历的时候,停止条件的问题,不再是最后一个节点指向NULL了,而是指向head。

线性表之单链表
线性表之顺序表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值