`
CrazyMizzz
  • 浏览: 23290 次
  • 性别: 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实现自定义双端队列(链表和数组两种方式) 数组和链表.pdf

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

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

    java基础知识代码实现,包括冒泡算法,快速算法,九九乘法表,创建多线程的方式,自定义链表,递归使用方式,创建单例等,可解压代码直接运行测试学习!

    Java双向链表的实现

    自定义的双向链表 博文链接:https://hiliangliang1130-126-com.iteye.com/blog/1144023

    java 链表,仅供参考

    java 自定义链表的使用,仅供参考,自定义使用

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

    该资源利用基础的链表结构,结合泛型和反射的知识点,实现重写LinkedList集合类,可以存放任意类型数据。比较推荐对Java有稳固基础的同学来阅读,为了方便阅读,代码的注释写的非常的清楚

    Java开发技术大全(500个源代码).

    signByIF.java 用if语句实现符号函数示例 triangleStar.java 输出一个由*组成的直角三角形 upperToLowCase.java 大写转换成小写 variableScopeExample.java 变量使用范围示例 第3章 示例描述:本章学习对象和类...

    java并发编程:juc、aqs

    这个队列的实现基于链表,可以高效地管理大量的等待线程,实现线程的排队和唤醒。 JUC 和 AQS 在 Java 并发编程中扮演着至关重要的角色。JUC 提供了丰富的多线程并发工具,可以帮助开发者构建高性能、可伸缩性的多...

    data-structures:用Java实现的所有数据结构

    Java:数据结构(DS) 所有数据结构均在Java中实现。 这是我出于教育目的而实施的所有数据结构的集合。 该代码经过了优化,并被编写为正确和可读的。 所有数据结构均经过测试,并被认为是正确的。测验编译编写程序时...

    PlugAndPlay:此存储库是Java类的汇编,这些Java类是各种DS和Algorithms概念的自定义实现,可以按原样添加到项目中,并在同名标准类上提供自定义功能

    即插即用 基于各种DS和Algo概念的自定义实现的即插即用Java类的编译。 CustomLinkedList.java:标准链接列表功能与其他功能的组合。... CustomDoublyLinkedList.java:双链表的自定义实现,如Stack和Queue。

    Java2实用教程.rar

    第13章常见数据结构的Java实现 13 1链表 13 2栈 13 3树集 13 4树映射 13 5散列集 13 6散列表 13 7向量 习题 第14章图形与图像 14 1绘制文本 14 2绘制基本图形 14 3建立字体 14 4清除 14 5Java2D 14 6图形的布尔运算 ...

    Data-Structures:Java,ICSI 213中的数据结构

    I CSI 213(= I CEN 213)(以前是I CSI ... Java中的链表实现。 普雷斯科特·卢克H4 Java中的堆栈和队列实现。 普雷斯科特·卢克H5 Java中的冒泡排序实现。 普雷斯科特·卢克H6 Java中的二叉树和二叉搜索树实现。

    java初学者必看

    最近正在学习Java,也买了很多的有关Java方面的书籍,其中发现《跟我学Java》这本书,都的很不错啊,所以顺便拿电脑把这本书的目录敲了下来,与大家分享。尤其是那些和我一样初学Java的朋友们,看看哪一节对你有用,...

    Java开发详解.zip

    020601_【第6章:面向对象(高级)】_继承的基本实现笔记.pdf 020602_【第6章:面向对象(高级)】_继承的进一步研究笔记.pdf 020603_〖第6章:面向对象(高级)〗_范例:继承的应用笔记.pdf 020604_【第6章:面向...

    java数据结构课程设计java代码

    界面使用swing做的,也利用的一些文件来存储数据,希望对大家能够有所帮助

    Java语言基础下载

    链表 248 栈(stack) 249 队列: 250 树: 250 实例分析 252 内容总结 274 独立实践 275 第十六章:数据库(一) 276 学习目标 276 数据库的基本概念 277 数据的描述 277 数据联系的描述 278 数据模型 278 数据库三级...

    Java常用算法手册源代码

    **章 算法和实现算法的Java语法 1.1 建立算法初步概念 1.1.1 什么是算法 1.1.2 算法的发展历史 1.1.3 算法的分类 1.2 算法相关概念的区别 1.2.1 算法与公式的关系 1.2.2 算法与程序的关系 1.2.3 算法与数据结构的...

    java 面试题 总结

    通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。 8、EJB是基于哪些技术实现的?并说出Session...

    java范例开发大全源代码

    第1篇 Java编程基础  第1章 Java开发环境的搭建(教学视频:9分钟) 2  1.1 理解Java 2  1.2 搭建Java所需环境 3  1.2.1 下载JDK 3  1.2.2 安装JDK 4  1.2.3 配置环境 5  1.2.4 测试JDK配置...

    java常用工具类的使用

    “工欲善其事,必先利其器”,在Java程序开发过程中,很多算法(比如:MD5加密算法)、很多数据结构(比如链表LinkedList)已经实现并且大多放在类库的java.util包中,程序员只需要了解各种工具的功能就可以直接调用...

Global site tag (gtag.js) - Google Analytics