单向循环链表

本文详细介绍了单向循环链表的概念,包括其存储结构和如何通过头插法、尾插法进行插入操作,以及如何进行删除操作。讨论了链表为空、只有一个节点时的特殊操作,并提供了get、set、find、contains、clear等函数的实现思路。最后,提到了toString和equals方法。
摘要由CSDN通过智能技术生成

既然有线性表的链式存储结构,那么我们可以想到一定也有单向循环链表。
下面让我们来看看单向循环链表。
在这里插入图片描述
单向循环链表的本质就是让单链表的尾节点指针指向头结点,这样就可以让整个单链表形成一个环。
这种头尾相连的单链表就叫做单向循环链表。

为了方便操作,我们让头指针不再指向虚拟头结点,而是直接指向真实头结点,也就是链表中的第一个节点。

此时单向循环链表因为存储结构的改变所以不能再用LinkedList 链表来实现了。但是他们都是单向的所以都要有节点的信息,都要私有化一个节点的内部类
实际上单向循环链表本质上是特殊的线性表,所以我们要实现之前写的list接口
1.下面我们来定义LoopSingle类
代码如下:

public class LoopSingle<E> implements List<E> {
	
	private Node head;		//定义一个头指针
	private Node rear;		//定义一个尾指针
	private int size;			//定义循环链表节点个数
	
	public LoopSingle() {			//创建单向循环链表的无参构造函数 
		head=null;					//创建时为空,所以头指针和尾指针都指向空,size=0
		rear=null;
		size=0;
	}
	public LoopSingle(E[] arr){		//创建单向循环链表的有参构造函数
												//传入一个数组,封装成循环链表
	}
	private class Node{				//私有化节点这个内部类
		E data;		//数据域
		Node next;	//指针域
		public Node(){					//创建节点的无参构造函数
			this(null,null);
		}
		public Node(E data,Node next){			//创建节点的有参构造函数
			this.data=data;
			this.next=next;
		}
}

一.插入
1.链表为空时
链表为空时head指针和rear指针都指向空,因为表中无带有元素的节点。

在这里插入图片描述
反之我们也可以看出判断单向循环链表为空的条件:head指向空,rear指向空,size=0
2.链表为空时插入一个节点
在这里插入图片描述
此时链表为空,head=null;rear=null;size=0。
我们要插入包含“A”元素的新节点

1.让head指向“A”元素所在的节点
2.让“A”元素所在节点的后继指针指向“A”元素所在节点(自身的数据域)
3.让rear指向“A”元素所在节点
这样就完成了链表为空时插入一个数据节点的操作,效果如下图。
在这里插入图片描述
此时就完成了size为1的一个单向循环链表

二.链表

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值