自我理解java linkedlist插入数据的算法:
首先看一下,linkedlist插入源代码:
public class LinkedList
extends AbstractSequentialList
implements List, Deque, Cloneable, java.io.Serializable
{
private transient Entry header = new Entry(null, null, null);//初始化时先实例一个header,链表头
/**
* Constructs an empty list.//构造一个空链表
*/
public LinkedList() {
header.next = header.previous = header; //把链表头和尾先连到自己(1)
addBefore(e, header);(2)
}
.......
public boolean add(E e) {//插入链表方法
return true;
}
.......
private static class Entry {//每个数据存放,所要用到的静态内部类
E element;
Entry next;//后一个节点
Entry previous;//接一个节点
Entry(E element, Entry next, Entry previous) {
this.element = element;
this.next = next;
this.previous = previous;
}
}
//插入操作方法
private Entry addBefore(E e, Entry entry) {
Entry newEntry = new Entry(e, entry, entry.previous);(3)
newEntry.previous.next = newEntry;(4)
newEntry.next.previous = newEntry;(5)
size++;(6)
modCount++;
return newEntry;
}
/*其他方法~~*/
以上部分就是算法所在:(一个简单的公式替换过程)
算法步骤(对应上面的编号):
(1)实例化一个header (Entry)
header.next = header
header.previous = header
当有第一条数据插入链表:
(3)实例化一个 Entry newEntry (以下简称E1)
E1.next = header
E1.previous = header.previous
E1.previous.next = header.previous.next = header.next
(4)由上面可得:
newEntry.previous.next = newEntry;
作用:
相当于 E1.previous.next = header.next = E1
其实就是,让上一个节的next指向下一个节点数据
所以header.next 的下一个节点就是E1
(5)E1.next.previous = header.previous = E1(这里用得巧妙)
其实这个用法单从E1.next.previous= E1单这么看,很直观因为E1的下一个节点数据的上一个节点就应该是E1
从上面可知,E1.next == header,为什么要把header.previous = E1呢?
其实包含着一个递归在里面。
如果再新增一个数据 Entry E2 :
从上面的代码可以看出,E2的实例化过程是:(其实linkedlist每次新增一个数据,都通过header传值)
Entry E2 = new Entry(data, header, header.previous);
主意代码部分的负值。关键就是这里,实例化的时候,E2.previous = header.previous = E1
简单得完成了负值过程。
然后 E2.previous.next = E1.next = E2
E2.next.previous = header.previous = E2 .......(接着插入下一条数据,如此递归)
(6)记录链表位数
设计到了一个小小的递归算法。
linkedlist记录一。完毕。。
分享到:
相关推荐
1. **Java语法基础**:Java是一种静态类型的、面向对象的编程语言,它的语法严谨,包括数据类型(如整型、浮点型、字符型、布尔型等)、变量声明、基本运算符、流程控制语句(如if-else,switch,for,while等)。...
这份"java校招学习笔记"应该是一个全面的参考资料,帮助求职者巩固Java知识,提高解决问题的能力,以应对面试中的各种挑战。同时,实践项目经验和解决实际问题的能力也是校招面试中不可或缺的部分,因此理论学习的...
Java中的`LinkedList`类实现了链表数据结构。 4. **二叉树**:二叉树是一种高效的数据结构,支持快速查找、插入和删除,前提是树保持平衡。未平衡的二叉树可能导致性能下降。 5. **平衡树**:如红-黑树和2-3-4树,...
【Java狂神说笔记】是针对Java开发语言深入学习的一份综合笔记,涵盖了广泛的Java相关知识点,适合初学者和有一定经验的开发者进行提升。这份笔记的PDF版本详细讲解了Java的基础概念、进阶特性和实战应用,旨在帮助...
3. **集合框架**: Java集合框架提供了多种数据结构(如ArrayList、LinkedList、HashSet、HashMap等)和算法,用于存储和操作对象。了解它们的区别和应用场景,以及如何使用泛型来提高代码的安全性和可读性,是提高...
### Java私塾学习笔记整理 #### 第一章:Java入门 **一、Java是什么?** Java是一种广泛使用的高级编程语言,由Sun Microsystems于1995年推出。它旨在为跨平台开发提供一种通用的语言环境,使开发者能够在任何...
《JAVA学习笔记》是林信良先生的一部深入浅出的Java编程教程,旨在帮助初学者和有一定经验的开发者巩固和提升Java编程技能。这本书涵盖了Java语言的基础到高级概念,是一份宝贵的自学资料。 首先,从基础部分开始,...
1. **Java简介** Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司)于1995年推出。它的设计目标是“一次编写,到处运行”,强调跨平台的可移植性,被广泛应用在企业级应用、移动应用...
1. **基础语法**:这部分会涵盖Java的基本数据类型(如整型、浮点型、字符型、布尔型)、变量声明、常量定义、运算符、流程控制(if语句、switch语句、for循环、while循环、do-while循环)以及数组的使用。...
这份"JAVA培训笔记PPT初级的"旨在帮助初学者掌握Java的基础知识,为后续的深入学习打下坚实基础。以下将对Java的核心概念、语法特点及主要知识点进行详细解析。 1. **Java概述**: Java是由Sun Microsystems(现已...
1. **基础语法**:Java的基础包括变量、数据类型(如整型、浮点型、字符型和布尔型)、运算符(算术、关系、逻辑和位运算符)、流程控制(if语句、switch语句、for循环、while循环)以及异常处理。 2. **面向对象**...
【JAVA SE 归档笔记】是一份由多位IT行业高手共同编撰的珍贵资料,旨在为初学者提供学习指引,并作为经验丰富的开发者们的参考手册。这份笔记深入浅出地涵盖了JAVA SE(Java Standard Edition)的核心知识点,对于...
3. **队列**:是一种先进先出(FIFO)的数据结构,Java提供了`Queue`接口和相关的实现类,如`LinkedList`和`ArrayDeque`。 4. **栈**:是一种后进先出(LIFO)的数据结构,Java中的`Stack`类实现了栈的功能。 非...
Java集合框架是Java编程语言中一个至关重要的组成部分,它提供了数据结构和算法的抽象,使得开发者可以方便地存储和管理各种类型的数据。本篇将详细探讨Java集合框架的基础知识,包括核心接口、类的层级结构以及Java...
Java是世界上最流行的编程语言之一,尤其在企业级应用开发领域占据主导地位。这份"Java课上笔记"涵盖了多个关键知识点,让我们一一展开讨论。 首先,我们来看“数学题编码”。在编程中,数学能力是非常重要的,它能...
初级算法笔记整理是对LeetCode上入门级别的算法问题的总结和学习心得,这些笔记通常包括问题的解析、解题思路、代码实现以及可能的优化。这份笔记以HTML格式导出,方便在不同的设备和环境中阅读。 在Java编程语言中...
Java 6学习笔记是针对初学者和有一定经验的开发者提供的一份全面的教育资源,它涵盖了Java编程语言的基础到高级概念。这份笔记旨在帮助读者深入理解Java 6的关键特性,提高编程技能,并为实际项目开发打下坚实基础。...
再者,笔记可能涵盖集合框架,这是Java中处理数据结构和算法的关键。ArrayList、LinkedList、HashSet、HashMap等接口和类的使用,以及泛型、迭代器等概念,对于高效地存储和处理数据至关重要。 线程是Java的另一大...
集合框架是Java处理数据结构的重要部分,笔记中详细介绍了ArrayList、LinkedList、HashSet、HashMap等容器的特性和用法,以及它们在实际编程中的应用。 输入输出(I/O)在Java中同样重要,笔记提供了使用Scanner类...