java实现双向循环链表

简介: java实现循环链表:http://www.cnblogs.com/lixiaolun/p/4643911.html 在单链表中,查询下一个元素的时间是O(1)。查询上一个元素的时间却是O(n)。 为了克服这种缺点,我们开始学习双向链表。

java实现循环链表:http://www.cnblogs.com/lixiaolun/p/4643911.html

在单链表中,查询下一个元素的时间是O(1)。查询上一个元素的时间却是O(n)。

为了克服这种缺点,我们开始学习双向链表。

双向链表类的代码:

package doublelinkedlist;

public class DoubleLinkedList {
	
	class Element
	{
		private Element prior=null;
		public Object value=null;
		private Element next=null;
	}
	
	private Element header = null;//头结点
	
	/**
	 * 初始化链表
	 * */
	void initList()
	{
		header = new Element();
		header.prior=header;
		header.value=null;
		header.next=header;
	}
	
	/**
	 * 向链表中第i个位置插入元素o
	 * */
	void insertList(Object o,int i)
	{
		if(i<=0||i>size())
		{
			System.out.println("插入位置不合法!链表长度为:"+size());
		}else
		{
			Element e = new Element();
			e.value=o;
			if(header.prior==header)//第一次插入元素
			{
				e.prior=header;
				e.next=header;
				header.next=e;
				header.prior=e;
			}else if(i==size())//在最后插入
			{
				System.out.println("在链表尾部插入");
				e.next=header;
				e.prior=header.prior;
				header.prior.next=e;
				header.prior=e;
				
			}else
			{
				Element temp = header;
				int count=0;
				while(temp.next!=header)
				{
					count++;
					if(count == i)
					{
						e.prior=temp;
						e.next=temp.next;
						temp.next.prior=e;
						temp.next=e;
					}
					temp=temp.next;
				}
			}
		}
		
	}
	/**
	 * 删除链表中的某个元素
	 * */
	void deleteList(int i)
	{
		if(i<=0||i>size())
		{
			System.out.println("插入位置不合法!链表长度为:"+size());
		}else
		{
			int count=0;
			Element temp = header;
			while(temp.next!=header)
			{
				temp=temp.next;
				count++;
				if(i==count)
				{
					//删除第i个元素
					temp.next.prior=temp.prior;
					temp.prior.next=temp.next;
				}
			}
		}
	}
	/**
	 * 打印链表
	 * */
	void print()
	{
		System.out.print("打印双向循环链表:");
		Element temp = header;
		while(temp.next!=header)
		{
			System.out.print(temp.next.value+"\t");
			temp=temp.next;
		}
		System.out.println();
	}
	/**
	 * 获取链表的大小
	 * */
	int size()
	{
		int count=1;
		Element temp = header;
		while(temp.next!=header)
		{
			count++;
			temp=temp.next;
		}
		return count;
	}
}

双向链表的测试类

package doublelinkedlist;

public class DoubleLinkedListMain {

	public static void main(String[] args) {
		DoubleLinkedList dlList = new DoubleLinkedList();//有头结点
		dlList.initList();
		dlList.insertList(1, 1);
		dlList.insertList(2, 2);
		dlList.insertList(3, 1);
		dlList.insertList(4, 1);
		dlList.insertList(5, 1);
		dlList.insertList(6, 6);
		dlList.print();
		dlList.deleteList(3);
		dlList.print();
	}

}

  

目录
相关文章
|
1月前
|
Java
Java快速入门之判断与循环
本文介绍了编程中的流程控制语句,主要包括顺序结构、判断结构(if语句和switch语句)以及循环结构(for、while和do...while)。通过这些语句可以精确控制程序的执行流程。if语句有三种格式,分别用于简单条件判断、二选一判断和多条件判断。switch语句适用于有限个离散值的选择判断,而循环结构则用于重复执行某段代码,其中for循环适合已知次数的情况,while循环适合未知次数但有明确结束条件的情况,do...while则是先执行后判断。文中还提供了多个示例和练习,帮助读者理解并掌握这些重要的编程概念。
|
6月前
|
存储 Java
|
3月前
|
Java 程序员 API
Java循环操作哪个快?
本文探讨了Java中stream API与传统for循环在性能上的对比,通过多个示例分析了不同场景下两者的优劣。作者指出,尽管stream API使代码更简洁,但不当使用会降低可读性和性能,特别是在处理大数据量时。实验结果显示,在多数情况下,普通for循环的性能优于stream API,尤其是在单次操作耗时较短但需多次执行的场景中。文章建议开发者在设计初期就考虑全局流程,避免重复使用stream流,以提升代码质量和性能。
Java循环操作哪个快?
|
3月前
|
Java 程序员 API
Java循环操作哪个快?
本文探讨了Java中Stream API与传统for循环的性能对比及适用场景。作者通过实际案例分析,指出在某些情况下,过度使用Stream API会导致代码可读性和维护性下降。测试结果显示,在数据量较小的情况下,普通for循环的性能优于Stream API,尤其是在涉及多次类似操作时。因此,建议在开发中根据具体需求选择合适的遍历方式,以提高代码的可读性和性能。
Java循环操作哪个快?
|
4月前
|
算法 Java 测试技术
🧑‍💻Java零基础:Java 的循环退出语句 break
【10月更文挑战第16天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
93 6
|
5月前
|
Java
java基础(2)循环语句for、while、do...while
本文介绍了Java中的基础循环语句,包括for循环、while循环和do...while循环。文章通过示例代码展示了for循环的基本结构和用法,while循环的先判断后执行逻辑,以及do...while循环的先执行后判断逻辑。这些循环语句在Java编程中非常常用,用于执行重复的任务。
78 4
java基础(2)循环语句for、while、do...while
|
5月前
|
Java
java数据结构,双向链表的实现
文章介绍了双向链表的实现,包括数据结构定义、插入和删除操作的代码实现,以及双向链表的其他操作方法,并提供了完整的Java代码实现。
java数据结构,双向链表的实现
|
4月前
|
Java 测试技术 数据安全/隐私保护
📖Java零基础-while循环语句的深度解析
【10月更文挑战第6天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
84 1
|
4月前
|
传感器 Java 测试技术
📖Java零基础-do-while循环语句的深入剖析
【10月更文挑战第5天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
67 1
|
4月前
|
存储 安全 Java
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
36 3

热门文章

最新文章