`
hyw520110
  • 浏览: 218676 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JAVA单向链表的实现

    博客分类:
  • java
阅读更多
Java代码 复制代码
  1. package com.leo_faith.www;   
  2.   
  3. public class Node {   
  4.     Object data;   
  5.   
  6.     Node next;   
  7.   
  8.     Node(Object d) {   
  9.         data = d;   
  10.         next = null;   
  11.     }   
  12. }  
package com.leo_faith.www;

public class Node {
	Object data;

	Node next;

	Node(Object d) {
		data = d;
		next = null;
	}
}

 

Java代码 复制代码
  1. package com.leo_faith.www;   
  2.   
  3. public class LinkList {   
  4.   
  5.     /* 用变量来实现表头 */  
  6.     private Node Head = null;   
  7.   
  8.     private Node Tail = null;   
  9.   
  10.     private Node Pointer = null//point to previous   
  11.   
  12.     private int Length = 0;   
  13.   
  14.     public void deleteAll() {// 清空整个链表   
  15.         Head = null;   
  16.         Tail = null;   
  17.         Pointer = null;   
  18.         Length = 0;   
  19.     }   
  20.   
  21.     // 链表复位,使第一个节点成为当前节点   
  22.     public void reset() {   
  23.         Pointer = null;   
  24.     }   
  25.   
  26.     // 判断链表是否为空   
  27.     public boolean isEmpty() {   
  28.         return (Length == 0);   
  29.     }   
  30.   
  31.     // 判断当前结点是否为最后一个结点   
  32.     public boolean isEnd() {   
  33.         if (Length == 0)   
  34.             throw new java.lang.NullPointerException();   
  35.         else if (Length == 1)   
  36.             return true;   
  37.         else  
  38.             return (cursor() == Tail);   
  39.     }   
  40.   
  41.     // 返回当前结点的下一个结点的值,并使其成为当前结点   
  42.     public Object nextNode() {   
  43.         if (Length == 1)   
  44.             throw new java.util.NoSuchElementException();   
  45.         else if (Length == 0)   
  46.             throw new java.lang.NullPointerException();   
  47.         else {   
  48.             Node temp = cursor();   
  49.             Pointer = temp;   
  50.             if (temp != Tail)   
  51.                 return (temp.next.data);   
  52.             else  
  53.                 throw new java.util.NoSuchElementException();   
  54.         }   
  55.     }   
  56.   
  57.     // 返回当前结点的值   
  58.     public Object currentNode() {   
  59.         Node temp = cursor();   
  60.         return temp.data;   
  61.     }   
  62.   
  63.     // 在当前结点前插入一个结点,并使其成为当前结点   
  64.     public void insert(Object obj) {   
  65.         Node e = new Node(obj);   
  66.         if (Length == 0) {   
  67.             Tail = e;   
  68.             Head = e;   
  69.         } else {   
  70.             Node temp = cursor();   
  71.             e.next = temp;   
  72.             if (Pointer == null)   
  73.                 Head = e;   
  74.             else  
  75.                 Pointer.next = e;   
  76.         }   
  77.         Length++;   
  78.     }   
  79.   
  80.     // 返回链表的大小   
  81.     public int size() {   
  82.         return Length;   
  83.     }   
  84.   
  85.     // 将当前结点移出链表,下一个结点成为当前结点,   
  86.     // 如果移出的结点是最后一个结点,   
  87.     // 则第一个结点成为当前结点   
  88.     public Object remove() {   
  89.         Object temp;   
  90.         if (Length == 0)   
  91.             throw new java.util.NoSuchElementException();   
  92.         else if (Length == 1) {   
  93.             temp = Head.data;   
  94.             deleteAll();   
  95.         } else {   
  96.             Node cur = cursor();   
  97.             temp = cur.data;   
  98.             if (cur == Head)   
  99.                 Head = cur.next;   
  100.             else if (cur == Tail) {   
  101.                 Pointer.next = null;   
  102.                 reset();   
  103.             } else  
  104.                 Pointer.next = cur.next;   
  105.             Length--;   
  106.         }   
  107.         return temp;   
  108.     }   
  109.   
  110.     // 返回当前结点的指针   
  111.     private Node cursor() {   
  112.         if (Head == null)   
  113.             throw new java.lang.NullPointerException();   
  114.         else if (Pointer == null)   
  115.             return Head;   
  116.         else  
  117.             return Pointer.next;   
  118.     }   
  119.   
  120.     // 链表的简单应用举例   
  121.     public static void main(String[] args) {   
  122.         LinkList a = new LinkList();   
  123.         for (int i = 1; i <= 10; i++)   
  124.             a.insert(new Integer(i));   
  125.         System.out.println("The currentNode is:" + a.currentNode());   
  126.         while (!a.isEnd())   
  127.             System.out.println("The nextNode is:" + a.nextNode());   
  128.         a.reset();   
  129.         while (!a.isEnd()) {   
  130.             a.remove();   
  131.         }   
  132.         a.remove();   
  133.         a.reset();   
  134.         if (a.isEmpty()) {   
  135.             System.out.println("There is no Node in List");   
  136.         }   
  137.     }   
分享到:
评论

相关推荐

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

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

    Java SE程序 类实现单向链表

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

    JAVA单向链表的实现.pdf

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

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

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

    java链表实现约瑟夫问题

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

    java单向链表代码实现

    在Java编程中,单向链表是一种常见的数据结构,它由一系列节点...通过这个例子,你不仅学会了如何在Java中实现单向链表,还了解了如何在实际编程中使用它们。记住,理解并熟练掌握数据结构是提升编程技能的关键步骤。

    单向链表源代码

    这段源代码提供了一个简单的单向链表实现,包括插入、删除和打印链表的方法。你可以根据实际需求扩展其他功能,如查找节点、反转链表等。在培训班中,这样的代码示例有助于学员理解和掌握单向链表的工作原理及其在...

    java语言模拟单向链表

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

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

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

    java单向链表的实现实例

    在这个实例中,我们将详细讨论如何在Java中实现单向链表,包括创建节点、插入节点、显示链表、删除节点、清空链表以及获取链表中指定范围内的数据。 首先,我们定义一个名为`Node`的类来表示链表中的节点。这个类有...

    单向链表实现的叫号程序

    在这个名为"单向链表实现的叫号程序"的案例中,我们可以通过分析`CallNum.java`文件来理解如何利用单向链表来实现一个简单的财务叫号系统。 首先,单向链表不像数组那样有一个连续的内存空间,它的每个元素(节点)...

    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。这种操作在实际开发中非常有用,例如在数据处理、数据分析等领域。 单向链表...

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

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

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

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

    Java版逆序单向链表的实现

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

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

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

    JAVA双向链表反转实现

    与单向链表不同,双向链表中的每个节点都有两个指针,一个指向前一个节点,另一个指向后一个节点。这使得在链表中的导航更加灵活,对于某些特定的操作,比如反转链表,提供了更高效的解决方案。 双向链表的节点通常...

    64-Java单向链表的逆序1

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

Global site tag (gtag.js) - Google Analytics