java实现循环链表

简介: 前面已经介绍了java实现单链表:http://www.cnblogs.com/lixiaolun/p/4643886.html 其实两者的主要差别就在于如何判断是否到了链表的结尾: 在单链表中 while(temp.

前面已经介绍了java实现单链表:http://www.cnblogs.com/lixiaolun/p/4643886.html

其实两者的主要差别就在于如何判断是否到了链表的结尾:

在单链表中

while(temp.next!=null)
{
	temp=temp.next;
}

在循环链表中

while(temp.next!=header)
{
	temp=temp.next;
}

 

下面是循环链表的代码和测试代码:

循环链表的代码:

package circularlinkedlist;

public class CircularLinkedList {
	
	class Element
	{
		public Object value=null;
		private Element next=null;
	}
	private Element header = null;//头结点
	/**
	 * 初始化链表
	 * */
	void initList()
	{
		header = new Element();
		header.value=null;
		header.next=header;
	}
	
	/**
	 * 插入链表
	 * */
	void insertList(Object o)
	{
		Element e=new Element();
		e.value=o;
		if(header.next==header)//第一次插入元素
		{
			header.next=e;
			e.next=header;
		}else//不是第一次插入元素
		{
			//temp引用在栈中,temp和header引用都指向堆中的initList()中new的Element对象
			Element temp = header;
			while(temp.next!=header)//寻找最后一个元素
			{
				temp=temp.next;
			}
			temp.next=e;
			e.next=header;//新插入的最后一个节点指向头结点
		}
	}
	
	/**
	 * 删除链表中第i个元素
	 * */
	void deletelist(Object o)
	{
		Element temp =header;
		while(temp.next!=header)
		{
			//判断temp当前指向的结点的下一个结点是否是要删除的结点
			if(temp.next.value.equals(o))
			{
				temp.next=temp.next.next;//删除结点
			}else
			{
				temp=temp.next;//temp“指针”后移
			}
		}
	}
	
	/**
	 * 获取链表的第i个位置的元素
	 * */
	Element getElement(int i)
	{
		if(i<=0 || i>size())
		{
			System.out.println("获取链表的位置有误!返回null");
			return null;
		}
		else
		{
			int count =0;
			Element element = new Element();
			Element temp = header;
			while(temp.next!=header)
			{
				count++;
				if(count==i)
				{
					element.value=temp.next.value;
				}
				temp=temp.next;
			}
			return element;
		}
	}
	/**
	 * 链表长度
	 * */
	int size()
	{
		Element temp = header;
		int size=0;
		while(temp.next!=header)
		{
			size++;
			temp=temp.next;
		}
		return size;
	}
	
	/**
	 * 判断链表中是否存在某元素
	 * */
	Boolean isContain(Object o)
	{
		Element temp =header;
		while(temp.next!=header)
		{
			if(temp.next.value.equals(o))
			{
				return true;
			}
			temp=temp.next;
		}
		return false;
	}
	/**
	 * 打印链表
	 * */
	void print()
	{
		System.out.print("打印链表:");
		Element temp =header;
		while(temp.next!=header)
		{
			temp=temp.next;
			System.out.print(temp.value+"\t");
		}
		System.out.println();
	}
}

测试代码:

package circularlinkedlist;

public class CircularLinkedListMain {

	public static void main(String[] args) {
		CircularLinkedList clList = new CircularLinkedList();
		clList.initList();
		clList.insertList(1);
		clList.insertList(2);
		clList.insertList(3);
		clList.insertList(4);
		clList.insertList(5);
		clList.print();
		
		System.out.println("链表长度:"+clList.size());
		clList.deletelist(1);
		clList.deletelist(5);
		clList.print();
		System.out.println("第1个元素值为:"+clList.getElement(1).value);
		System.out.println("第2个元素值为:"+clList.getElement(2).value);
		System.out.println("第3个元素值为:"+clList.getElement(3).value);
	
		System.out.println(clList.isContain(2));
		System.out.println(clList.isContain(6));
//		System.out.println(clList.isContain(5));
	}

}

  

目录
相关文章
|
1月前
|
Java
Java周期循环的代码可以如此简单
Java周期循环的代码可以如此简单
26 2
|
2月前
|
Java
Java移除链表元素
Java移除链表元素
26 0
|
3月前
|
C++ Python Java
Java每日一练(20230501) 路径交叉、环形链表、被围绕的区域
Java每日一练(20230501) 路径交叉、环形链表、被围绕的区域
35 0
Java每日一练(20230501) 路径交叉、环形链表、被围绕的区域
|
25天前
|
Java 数据库连接 API
Java 学习路线:基础知识、数据类型、条件语句、函数、循环、异常处理、数据结构、面向对象编程、包、文件和 API
Java 是一种广泛使用的、面向对象的编程语言,始于1995年,以其跨平台性、安全性和可靠性著称,应用于从移动设备到数据中心的各种场景。基础概念包括变量(如局部、实例和静态变量)、数据类型(原始和非原始)、条件语句(if、else、switch等)、函数、循环、异常处理、数据结构(如数组、链表)和面向对象编程(类、接口、继承等)。深入学习还包括包、内存管理、集合框架、序列化、网络套接字、泛型、流、JVM、垃圾回收和线程。构建工具如Gradle、Maven和Ant简化了开发流程,Web框架如Spring和Spring Boot支持Web应用开发。ORM工具如JPA、Hibernate处理对象与数
89 3
|
29天前
|
Java
java使用循环案例—
java使用循环案例—
9 0
|
1月前
|
存储 Java
Java链表
Java链表
11 0
|
1月前
|
Java 开发者 Spring
【Java】Spring循环依赖:原因与解决方法
【Java】Spring循环依赖:原因与解决方法
27 0
|
1月前
|
算法 Java 索引
[Java·算法·简单] LeetCode 141. 环形链表 详细解读
[Java·算法·简单] LeetCode 141. 环形链表 详细解读
23 0
|
1月前
|
存储 Java 容器
深入Java核心:变量、循环与条件语句的魔法
深入Java核心:变量、循环与条件语句的魔法
13 0
|
1月前
|
存储 算法 Java
【数据结构与算法】2、链表(简单模拟 Java 中的 LinkedList 集合,反转链表面试题)
【数据结构与算法】2、链表(简单模拟 Java 中的 LinkedList 集合,反转链表面试题)
42 0