`
marcoSpring
  • 浏览: 33155 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 单向链表

 
阅读更多

   链表是由一个又一个的节点组成的,每个节点都包括节点值以及下一个节点的存储地址。
   首先先看节点类

package test; 
/** 
 * @author Marospring
 * @version 创建时间:2012-7-25 上午11:46:23 
 * 单链表节点 
 */
public class LinkNode {
	public char value;
	public LinkNode next;
	
	
}


这是一个节点类,为了表述方便,这里我没有写setter和getter,直接将属性设置成public,在操作节点的时候直接用“=”,这里可以理解为指向的意思。下面先看图再看代码。

package test; 


/** 
 * @author Marcospring 
 * @version 创建时间:2012-7-25 上午11:46:41 
 * 单链表
 */
public class LinkedList{
	private LinkNode head;
	private LinkNode tail;
	private int size;

	public LinkedList(){
		this.size = 0;
	}
	
	//添加元素
	public void add(char c){
		LinkNode node = new LinkNode();
		node.value = c;
		if(size == 0){
			//如果链表为空则将头节点和尾节点都指向新加入的节点
			head = node;
			tail = node;
		}else{
			//如果不为空,则先将为加入新节点前的为节点的next指向新节点,然后将尾元素赋值为新节点
			tail.next = node;
			tail = node;
		}
		size++;
	}
	//在指定位置添加元素
	public void add(int index,char c){
		LinkNode node = new LinkNode();
		node.value = c;
		LinkNode temp = new LinkNode();
		temp = head;
		//寻找要加入节点的位置,要找到加入位置的前一个节点。
		for(int i=0;i<index-1;i++){
			temp = temp.next;
		}
		//将要添加节点的next指向找到节点的next
		node.next = temp.next;
		//将找到节点的next指向新加入的节点。
		temp.next = node;
		size++;
	}
	//删除指定位置的元素
	public void remove(int index){
		LinkNode temp = new LinkNode();
		temp = head;
		//找到要删除元素的前一个节点
		for(int i = 0;i<index-1;i++){
			temp = temp.next;
		}
		//要删除节点的前一个元素的next指向它的下下个元素
		temp.next = temp.next.next;
		size--;
	}
	//清空链表
	public void clear(){
		head =null;
		tail = null;
		size = 0;
	}
	//是否包含某元素
	public boolean contain(char c){
		LinkNode temp = new LinkNode();
		temp = head;
		for(int i=0;i<size-1;i++){
			if(temp.value == c){
				return true;
			}else{
				temp = temp.next;
			}
		}
		return false;
	}
	//链表大小
	public int size(){
		return size;
	}
	//获得制定位置元素
	public char get(int index){
		LinkNode node = new LinkNode();
		node = head;
		if(index > size){
			//这里可以拋异常,我选择打印,然后返回“!”
			System.out.println("您访问的元素不存在!");
			return '!';
		}else{
			for(int i=0;i<index-1;i++){
				node = node.next;
			}
			return node.value;
		}
	}
	//展示链表
	public void display(){
		LinkNode node = new LinkNode();
		node = head;
		for(int i = 0;i<size;i++){
			System.out.print(node.value+",");
			node = node.next;
		}
	}
}


这里要注意的是在指定位置添加节点的这个方法,如果先将找到节点的next指向新加入的节点,然后再将新加入节点的next指向找到节点的next会出现什么情况呢?

 

  • 大小: 130 KB
分享到:
评论

相关推荐

    Java 单向链表 插入与删除节点

    这是一个单向链表,它具有插入与删除节点的功能。Entry类实现了链表的各节点。

    JAVA单向链表的实现.pdf

    ### JAVA单向链表的实现知识点详解 #### 一、链表基础概念 在深入了解Java单向链表的具体实现之前,我们首先需要了解链表的基本概念。链表是一种线性数据结构,它由一系列节点组成,每个节点包含两部分:数据域和...

    java 单链表和双向链表的实现

    本话题主要探讨两种常用的数据结构——单链表和双向链表在Java中的实现,以及相关的操作,如在头部添加节点、在尾部添加节点、遍历、逆置和删除。 首先,我们来理解单链表和双向链表的基本概念。单链表是一种线性...

    java单向链表代码实现

    在Java编程中,单向链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据元素和指向下一个节点的引用。这个数据结构允许快速插入和删除操作,但不支持随机访问。下面我们将深入探讨Java中单向链表的...

    64-Java单向链表的逆序1

    在Java中,单向链表可以被实现为LinkedList类,与ArrayList相比,它提供了不同的操作性能特点。ArrayList是基于数组实现的,而LinkedList则是通过节点之间的链接来存储数据,这使得在链表中插入和删除元素更加高效,...

    java单向链表的实现实例

    Java中的单向链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的引用。在这个实例中,我们将详细讨论如何在Java中实现单向链表,包括创建节点、插入节点、显示链表、...

    Java SE程序 类实现单向链表

    Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现...

    java语言模拟单向链表

    java语言模拟单向链表,JAVA数据结构

    java链表实现约瑟夫问题

    约瑟夫问题,通过类实现的链表,并加以改进,做成双向链表

    单向链表源代码

    在Java编程中,单向链表通常通过定义一个节点类来实现,每个节点包含数据和指向下一个节点的引用。下面我们将深入探讨单向链表的原理、结构以及如何用Java编写源代码。 单向链表的基本结构: 单向链表由一系列节点...

    04.单向链表以及单向链表的应用.ppt

    04.单向链表以及单向链表的应用.ppt

    数据结构 单向链表 双向链表 源程序

    在"第一、二章"的压缩文件中,很可能包含了实现单向链表和双向链表操作的C、C++、Java或Python等语言的源代码示例。这些示例程序可能涉及了初始化链表、插入新节点、删除指定节点、查找特定元素、打印链表内容等功能...

    java链表重发现循环代码

    Amazon 面试题,如何用O(N)实现在链表中找出 是否出现循环(Loop),算法也可以用在其他语言(C,C++等)

    Java实现单向链表反转

    Java实现单向链表反转 Java实现单向链表反转是指将单向链表的顺序颠倒,例如原链表为A-&gt;B-&gt;C-&gt;D-&gt;E-&gt;F,反转后变为F-&gt;E-&gt;D-&gt;C-&gt;B-&gt;A。这种操作在实际开发中非常有用,例如在数据处理、数据分析等领域。 单向链表...

    LinkedBlockingQueue + 单向链表基本结构

    总的来说,LinkedBlockingQueue通过单向链表的数据结构,结合阻塞队列的特性,为Java并发编程提供了一种高效的解决方案。了解其内部工作原理有助于我们更好地利用这一工具,优化并发程序的性能和可维护性。在实际...

    java实现的单向链表和双向链表

    本篇将深入探讨由Java实现的单向链表和双向链表。 首先,我们来理解单向链表。单向链表中的每个节点包含两部分:数据域(存储实际数据)和指针域(存储指向下一个节点的引用)。这种结构使得链表只能向前遍历,不能...

    Java算法(链表操作实例)

    本文将深入探讨Java中链表的操作实例,旨在帮助开发者更好地理解和运用链表来解决实际问题。 首先,我们需要理解链表的基本概念。链表不同于数组,它不连续存储元素,每个元素(称为节点)包含数据以及指向下一个...

    逆序输出单向链表-Java 版本

    附件是逆序输出单向链表_Java 版本源码,代码首先定义了一个Node类来表示链表的节点,然后定义了一个LinkedList类来表示单链表,并提供了添加节点、打印链表和逆序链表的方法。最后,在Main类中创建了一个链表实例,...

    Java版逆序单向链表的实现

    附件是Java版逆序单向链表的实现,一个.java 文件,编译后即可运行,文件绿色安全,仅供学习交流使用,欢迎大家下载学习交流! 代码首先定义了一个ListNode类来表示链表中的节点,然后在reverseList方法中实现了...

Global site tag (gtag.js) - Google Analytics