在上一篇博文中我们介绍了动态链表以及单链表的实现,今天我们来看一下链表中的单向循环链表,首先我们回顾一下单链表,我们都在知道在单链表中插入或者删除dou都必须进行遍历,找到对应位置的前驱结点,且只能从前往后,因为单链表值得就是单向链表。所以只能从前向后,这就导致当中某一个结点就没有办法找到他的前驱结点了。
因此,有了我们有了单向循环链表,循环链表就是将本来没有指向的尾结点元素的下一跳指向头结点,这样我们就可以通过循环的方式进行查询,来解决上文提出的无法ch查找前驱结点的问题
一、单向循环链表的定义。
将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为单循环链表,简称'循环链表。
二、循环链表与单链表的区别
简单来说循环链表就是单链表的升级版,所以大多数方法都是相同的,主要差异就是在循环判断条件上,原理啊是判断结点的下一跳是否为空,现在时判断下一跳是否等于头结点。
这就是循环链表和单链表的区别,其他的基本一致
具体实现:当p等于head的时候返回-1跳出循环。
while(p.data!=e){
p=p.next;
index++;
if(p==head){
return -1;
}
}
三、单链表的实现
我们在实现单向循环链表之前,先将单向循环链表中和单链表中区别比较大的几个部分的实现逻辑进行梳理一下。
1、插入结点
1)头插:将尾结点的下一跳指向插入节点,将插入结点的下一跳给原来的头结点元素,将头指针后移向新结点