`
CrazyMizzz
  • 浏览: 24244 次
  • 性别: Icon_minigender_1
  • 来自: 浙江
社区版块
存档分类
最新评论

java 实现自定义链表

阅读更多
1.链表结构

  链表是链式的结构


2.链表的组成

   链表是由头节点,中间节点和尾节点组成

   节点是由两个部分组成:

      1.数据域
      2.引用域


3.链表的实现

   Node{

      数据域

      引用域

   }

   MyLinkedList{

      记录元素总数的属性

      头节点属性

      head;

      尾节点属性

      trail;

     }
下面上代码


public class DoubleLinkedList{
	private static class Node {
		Object value;
		Node prev = this;
		Node next = this;

		Node(Object v) {
			value = v;
		}

		public String toString() {
			return value.toString();
		}
	}

	private Node head = new Node(null);
	// 头节点
	private int size;

	// 链表大小
	// 以下是接口方法
	public boolean addFirst(Object o) {
		addAfter(new Node(o), head);
		return true;
	}

	public boolean addLast(Object o) {
		addBefore(new Node(o), head);
		return true;
	}

	public boolean add(Object o) {
		return addLast(o);
	}

	public boolean add(int index, Object o) {
		addBefore(new Node(o), getNode(index));
		return true;
	}
	
	public boolean revise(int index, Object o) {
		reviseNode(new Node(o), getNode(index));
		return true;
	}
	
	public boolean remove(int index) {
		removeNode(getNode(index));
		return true;
	}

	public boolean removeFirst() {
		removeNode(head.next);
		return true;
	}

	public boolean removeLast() {
		removeNode(head.prev);
		return true;
	}

	public Object get(int index) {
		return getNode(index).value;
	}

	public int size() {
		return size;
	}

	public String toString() {
		StringBuffer s = new StringBuffer();
		Node node = head;
		for (int i = 0; i < size; i++) {
			node = node.next;
			if (i > 0)
				s.append("   ");
			s.append(node.value);
		}
		return s.toString();
	}

	private Node getNode(int index) {
		if (index < 0 || index >= size)
			System.out.println("错误");
		Node node = head.next;
		for (int i = 0; i < index; i++)
			node = node.next;
		return node;
	}

	private void addBefore(Node newNode, Node node) {
		newNode.next = node;
		newNode.prev = node.prev;
		newNode.next.prev = newNode;
		newNode.prev.next = newNode;
		size++;
	}
	
	private void reviseNode(Node newNode, Node node) {
		newNode.next = node.next;
		newNode.prev = node.prev;
		newNode.next.prev = newNode;
		newNode.prev.next = newNode;
	}

	private void addAfter(Node newNode, Node node) {
		newNode.prev = node;
		newNode.next = node.next;
		newNode.next.prev = newNode;
		newNode.prev.next = newNode;
		size++;
	}

	private void removeNode(Node node) {
		node.prev.next = node.next;
		node.next.prev = node.prev;
		node.prev = null;
		node.next = null;
		size--;
	}
}

0
0
分享到:
评论

相关推荐

    Java实现的自定义链表

    在 Java 中,实现一个自定义的链表(如单链表或双链表)是一个非常好的练习。下面是一个单链表的完 整实现,包括基本的操作如插入、删除、查找和遍历。

    java双端队列的实现-Java实现自定义双端队列(链表和数组两种方式) 数组和链表.pdf

    在链表实现中,需要注意的是在插入和删除操作时需要仔细考虑被操作节点与前后节点的关系。例如,在插入操作时,需要将新节点插入到队列的头部或尾部,并更新相应的节点关系。 数组实现 数组实现的双端队列需要规定...

    Java算法(链表操作实例)

    在编程领域,算法是解决问题的关键,而链表作为一种基础数据结构,在实现各种复杂算法时...在实际开发中,Java的`java.util.LinkedList`类提供了链表操作的便利接口,但自定义链表可以帮助更深入地理解数据结构和算法。

    Java用链表实现的计算器程序.rar_JAVA计算器链表_计算器链表

    这个"Java用链表实现的计算器程序"很可能是设计为一个解析表达式并进行计算的系统。链表在这里的角色可能是用来表示数学表达式的结构。例如,每个节点可能包含一个运算符(如加、减、乘、除)或者一个数字,通过这种...

    java链表 个人总结

    Java中提供了两种内置的链表实现:LinkedList和ArrayList。ArrayList基于动态数组,适合随机访问和索引操作,而LinkedList则更适合进行插入和删除操作,因为它的遍历速度更快。LinkedList实现了Deque(双端队列)和...

    2022年Java语言中链表和双向链表Java教程.docx

    在实际编程中,Java集合框架中的LinkedList类就是基于链表实现的,它提供了丰富的API来操作链表,如add(), remove(), get()等,可以直接使用而无需自定义链表类。了解并掌握链表的原理和操作,对于提高编程能力,...

    java基础知识代码实现,包括冒泡算法,快速算法,九九乘法表,创建多线程的方式,自定义链表,递归使用方式,创建单例等。javaBasicGrammar.zip

    自定义链表(Custom LinkedList)则是对数据结构的学习,链表不同于数组,它在内存中不是连续存储的。Java提供了LinkedList类,但编写自己的链表可以帮助你更好地理解链表的工作原理,包括节点的添加、删除和遍历。 ...

    Java版链表模板类

    本话题主要关注的是Java中的链表实现,特别是循环链表的模板类设计。循环链表与普通链表的主要区别在于最后一个节点指向了头节点,形成一个闭合的环,这在处理循环遍历或某些特定算法时非常方便。 首先,让我们详细...

    java模拟实现数组链表树图等数据结构

    Java中有ArrayList和LinkedList两种链表实现,前者基于数组,后者基于链式节点。项目可能模拟了这些链表的操作,如添加、删除、查找和遍历。 树是一种非线性数据结构,每个节点可以有零个或多个子节点。常见的树...

    java版链表实现定时器功能

    在Java中,`java.util.Timer`类和`java.util.TimerTask`类提供了这样的功能,但它们是基于线程的,而非链表实现。然而,如果我们想用链表来实现定时器,我们可以模拟这个过程,创建一个节点代表每个待执行的任务,...

    链表+泛型+反射实现自定义的LinkedList集合类

    本资源通过实现一个自定义的LinkedList集合类,深入探讨了如何将链表、泛型和反射这三个关键知识点结合在一起。 首先,链表在Java中的标准实现是`java.util.LinkedList`类,它提供了添加、删除、查找等操作,支持...

    双向链表(java实现)

    在实际开发中,Java的`java.util.LinkedList`类已经为我们提供了内置的双向链表实现。然而,理解如何自定义实现双向链表有助于深入理解数据结构和算法,对于提升编程技能和解决问题的能力大有裨益。

    基于Java实现数据结构链表相关程序.zip

    - 在这个压缩包中的PDF文件可能会详细解释如何在Java中创建自定义链表类,实现上述基本操作。它可能涵盖了类定义、构造函数、方法实现以及测试用例等内容。 - 通常,这样的程序会涉及面向对象编程概念,如类、对象...

    Java有序非循环双向链表算法实例

    在Java中,双向链表可以使用内置的`java.util.LinkedList`类实现,但要实现有序且非循环的特性,可能需要自定义链表节点类,并添加额外的排序逻辑。例如: ```java class Node { int data; Node prev; Node next...

    Java双向链表的实现

    下面我们将详细讲解如何实现一个自定义的Java双向链表,并参考提供的`LinkNode.java`文件来理解其内部机制。 首先,我们需要定义一个表示链表节点的类`LinkNode`。这个类通常包含三个属性:存储数据的`data`字段、...

    java实现自己的单链表、双链表、Map存储

    本主题将深入探讨如何使用Java实现自己的单链表、双链表以及Map存储。 首先,我们来讨论单链表。单链表是一种线性数据结构,其中每个元素(节点)包含两个部分:一个是数据部分,用于存储实际的数据;另一个是引用...

    java入门程序(模拟图书馆管理)

    然而,对于初学者来说,直接使用LinkedList可能会掩盖底层数据结构的实现细节,因此,这个项目更可能要求自定义链表结构,通过定义Node类来表示链表节点,并实现插入、删除、查找等基本操作。 该项目的实现可能包含...

    java 动态的数组链表

    在实现动态数组链表时,例如`MyLinkedList.java`可能包含自定义的链表节点类(Node),包含数据和指向下一个节点的引用,以及链表类本身,提供类似ArrayList的操作。`Java.jpg`可能是用于辅助理解链表概念的可视化图...

    链表实现源码(C、C++、JAVA)

    C语言中的链表实现主要依赖于结构体和指针。一个基本的链表节点结构体通常包含两个部分:数据存储区域和指向下一个节点的指针。例如: ```c typedef struct Node { int data; // 存储的数据 struct Node* next; /...

    Java数组+链表简单实现HashMap的put和get 数组和链表.pdf

    这里我们将分析一个简单的自定义HashMap实现,它使用Java数组和链表来完成put和get操作。 首先,我们看到类`MyHashMap`包含一个名为`Entry`的内部类,`Entry`类代表数组中的每个元素,它包含了键(K)和值(V),...

Global site tag (gtag.js) - Google Analytics