`
marcoSpring
  • 浏览: 32761 次
  • 性别: 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单向链表代码实现

    java单向链表代码实现

    java单向链表的实现实例

    java单向链表的实现实例。需要的朋友可以过来参考下,希望对大家有所帮助

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

    操作包括: 1. 在头部添加结点 2. 在尾部添加结点 3. 遍历 4. 逆置 5. 删除

    Java SE程序 类实现单向链表

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

    java语言模拟单向链表

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

    java链表实现约瑟夫问题

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

    64-Java单向链表的逆序1

    这个说起来也简单就是把1-2-3-4-5这样的链表逆序构建或打印出来5-4-3-2-1。比如用后进先出的栈的特性来做:就是按照链表的顺序把数据压入栈中,再打印栈

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

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

    单向链表源代码

    培训班老师自己写的单向链表,代码非常全,也很好理解,可执行。

    java链表重发现循环代码

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

    Java实现单向链表反转

    主要为大家详细介绍了Java实现单向链表反转,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

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

    Java版逆序单向链表的实现

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

    Java算法(链表操作实例)

    一个java实例,用来描述java算法中链表的使用。

    单向链表的逆序-Java版本

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

    单向循环链表(JAVA)

    类似约瑟夫环问题。有一群人组成一个圈。从头开始按照顺时针方向从1开始依次报数。报到到9的人就离开圈子。其左手边的人接着从1开始报数。依此进行,直到剩最后一个人为止。

    Java实现单向链表的基本功能详解

    主要给大家介绍了关于Java实现单向链表基本功能的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

    java编写的循环链表来实现约瑟夫环

    循环链表 实现约瑟夫环 java 自己写的 测试通过 有注释

Global site tag (gtag.js) - Google Analytics