java实现单链表

简介: 前面已经介绍了java如何实现顺序链表:http://www.cnblogs.com/lixiaolun/p/4643664.html 接下来,我们开始学习java实现单链表。   单链表类 package linklist; public class LinkList { ...

前面已经介绍了java如何实现顺序链表:http://www.cnblogs.com/lixiaolun/p/4643664.html

接下来,我们开始学习java实现单链表。

 

单链表类

package linklist;

public class LinkList {
	
	class Element
	{
		public Object value=null;
		private Element next=null;
	}
	private Element header = null;//头结点
	/**
	 * 初始化链表
	 * */
	void initList()
	{
		header = new Element();
		header.value=null;
		header.next=null;
	}
	
	/**
	 * 插入链表
	 * */
	void insertList(Object o)
	{
		Element e=new Element();
		e.value=o;
		if(header.next==null)//第一次插入元素
		{
			header.next=e;
		}else//不是第一次插入元素
		{
			//temp引用在栈中,temp和header引用都指向堆中的initList()中new的Element对象
			Element temp = header;
			while(temp.next!=null)//寻找最后一个元素
			{
				temp=temp.next;
			}
			temp.next=e;
		}
	}
	
	/**
	 * 删除链表中第i个元素
	 * */
	void deletelist(Object o)
	{
		Element temp =header;
		while(temp.next!=null)
		{
			//判断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!=null)
			{
				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!=null)
		{
			size++;
			temp=temp.next;
		}
		return size;
	}
	
	/**
	 * 判断链表中是否存在某元素
	 * */
	Boolean isContain(Object o)
	{
		Element temp =header;
		while(temp.next!=null)
		{
			if(temp.next.value.equals(o))
			{
				return true;
			}
			temp=temp.next;
		}
		return false;
	}
	/**
	 * 打印链表
	 * */
	void print()
	{
		System.out.print("打印链表:");
		Element temp =header;
		while(temp.next!=null)
		{
			temp=temp.next;
			System.out.print(temp.value+"\t");
		}
		System.out.println();
	}
}

  测试类

package linklist;

public class LinkListMain {

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

}

  

目录
相关文章
|
2月前
|
存储 Java
Java实现单链表
Java实现单链表
19 0
|
3月前
|
Java C++
单链表(Java每日一题)
单链表(Java每日一题)
29 0
|
8月前
|
Rust 自然语言处理 Java
单链表的多语言表达:C++、Java、Python、Go、Rust
单链表是一种链式数据结构,由一个头节点和一些指向下一个节点的指针组成。每个节点包含一个数据元素和指向下一个节点的指针。头节点没有数据,只用于表示链表的开始位置。单链表相对于数组的优点是插入和删除元素时不需要移动其他元素,时间复杂度为O(1)。但是,在查找元素时,单链表比数组要慢,时间复杂度为O(n)。
16640 7
|
7月前
|
存储 Java
图解Java数据结构之单链表
图解Java数据结构之单链表
|
Java
Java 实现汉字按照首字母分组排序
Java 实现汉字按照首字母分组排序
561 0
|
9月前
|
Java
java数据结构21:按大小顺序建立单链表并按要求删除节点
输入的每一行是姓名和年龄。读入每个人的信息,按年龄从小到大建立一个单链表。 按示例格式输出这个单链表。 删除链表中所有年龄是偶数的节 点,按示例格式输出剩下的所有节点。 要求:必须删除节点,不能只是跳过节点不输出。
46 0
|
10月前
|
存储 算法 Java
Java数据结构与算法分析(三)链表(单链表、双链表、环形链表)
通过前篇文章《[数组](https://blog.csdn.net/gozhuyinglong/article/details/109702860)》了解到数组的存储结构是一块连续的内存,插入和删除元素时其每个部分都有可能整体移动。为了避免这样的线性开销,我们需要保证数据可以不连续存储。本篇介绍另一种数据结构:链表。
174 0
|
10月前
|
存储 Java
一篇文章入门单链表+刷题实践【java实现+详细注释】
一篇文章入门单链表+刷题实践【java实现+详细注释】
10649 2
|
11月前
|
算法 Java
Java算法基础 - 单链表详解(文末有配套视频)
咳咳,我是小白,没错,主线剧情又回来了。现在我遇到麻烦了,老板要我设计一个类,可以用来保存多个客户的资料。
134 0