一、链表介绍

数组和链表都是最基础的线性数据结构,可以用来实现栈,队列等非线性,有特定应用场景的数据结构。数组作为数据存储结构有很多缺陷,在无序数组中搜索效率低,在有序数组中插入效率又很低,无论哪种情况删除操作效率都很低。而且数组一旦创建,大小不可更改。除非是要频繁通过下标访问数据,否则在很多场合都可以用链表替换数组。

1️⃣什么是链表?

链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表通常由一连串节点组成,每个节点包含该节点的数据和指向上一节点或者下一节点的引用(链接)。如下图,在数据结构中,a1里面的指针存储着a2的地址,这样一个链接一个,就形成了链表。

①相邻元素之间通过指针链接

②最后一个元素的后继指针为NULL

③在程序执行过程中,链表的长度可以增加或缩小

④链表的空间能够按需分配

⑤没有内存空间的浪费

2️⃣链表的优缺点?

①优点:

插入和删除时不需移动其他元素,只需改变指针,效率高。

链表各个节点在内存中空间不要求连续,空间利用率高。

大小没有固定,拓展很灵活。

②缺点:查找数据时效率低,因为不具有随机访问性。

3️⃣链表的种类

单向链表、双向链表、循环单链表、循环双链表等等。

二、单向链表

单向循环链表。与单向线性链表不同的是,链表尾节点的后指针指向头节点。首尾相接构成环状结构。

单向线性链表。单向链表是最简单的链表,单链表节点包含两部分内容,一是存储数据信息,二是存储指向下一个节点的指针,叫做后指针。最后一个节点叫做尾节点,尾节点的后指针为 NULL。其中第一个节点叫做头节点,指向头结点的指针叫做头指针。

单向链表只可向一个方向遍历,一般查找一个节点的时候需要从第一个节点开始每次访问下一个节点,一直访问到需要的位置。

插入一个节点,对于单向链表,只提供在链表头插入,只需要将当前插入的节点设置为头节点,next 指向原头节点即可。

删除一个节点,将该节点的上一个节点的 next 指向该节点的下一个节点。

三、双端链表

如果想在单项链表尾部添加一个节点,那么必须从头部一直遍历到尾部,找到尾节点,然后在尾节点后面插入一个节点,这样操作很麻烦。如果在设计链表的时候多个对尾节点的引用,那么会简单很多。

四、双向链表

双向循环链表。与双向线性链表相比,头节点中的前指针指向尾节点,尾节点的后指针指向头节点,构成环状结构。

双向线性链表。每个节点除了存放本身元素以外,还需要保存指向下一个节点的指针,叫做后指针,以及指向前一个节点的指针,叫做前指针。双向线性链表中头节点的前指针为空,以及尾节点后指针也是空指针。

链表在java中的应用_Java链表相关推荐

  1. java集合—— 链表(java中的所有链表都是双向链表)

    [0]README 0.1) 本文描述转自 core java volume 1, 源代码 diy 的, 旨在理解 java集合-- 链表(java中的所有链表都是双向链表) 的相关知识: 0.2) ...

  2. 数据结构之链表及其Java实现_数据结构之链表及其Java实现

    数据的存储一般分线性存储结构和链式存储结构两种.前者是一种顺序的存储方式,在内存中用一块连续的内存空间存储数据,即逻辑上相连的物理位置相邻,比较常见的就是数组:后者是一种链式存储方式,不保证顺序性,逻 ...

  3. java中的集合_Java 集合介绍,常用集合类

    JAVA 集合 在处理数据的过程中经常会需要一个容器来存储某一类型的数据,Java 中的数组就是这样一种容器.但 Java 中的数组有其局限性,定义后的数组长度不可变,超出数组长度后就不能再存放数据了 ...

  4. java中collection方法_Java 8中的Collector toCollection()方法

    toCollection()Java中的Collector类的方法返回一个Collector,该Collector以遇到的顺序将输入元素累积到一个新的Collection中. 语法如下static & ...

  5. java中的多态_Java中的多态

    多态与HoFs 朋友们好久不见啊,最近笔者同时在写脚本型语言--JavaScript,和工业级的面向对象语言--Java. 在写代码的同时呢,也会思考这些语言的不同.今天就拿 Java 中的多态,来谈 ...

  6. java中包的_Java中的包

    包:定义包用package关键字. 1:对类文件进行分类管理. 2:给类文件提供多层名称空间. 如果生成的包不在当前目录下,需要最好执行classpath,将包所在父目录定义到classpath变量中 ...

  7. java中原生方法_java中原生(native)函数的用法

    1.原生(Native)函数的概念 在Java程序中,可以使用由其他编程语言实现的函数,这种函数,在Java中被称之为 原生(Native)函数. 2.在Java程序中使用原生函数的优缺点 1)优点 ...

  8. java中graphics抽象类_Java中的抽象类

    抽象类 抽象是一种概念,而不是如何实现,比如你的老板说,大家加油哈,将来发财了人人有份.又如,好好学,将来必成大牛,这些都可以理解成是一种抽象的,你也可以理解成所谓的抽象就是光说不做. 在Java中通 ...

  9. java中怪物移动_java中两大怪物,附带面试题!

    最近老是有小伙伴问类和Object相关的问题,感觉还是很多人对此不是很明白,那我们今天就干掉这两个怪物. 类介绍 Java 程序是由若干个类组成的,类也是面向对象编程思想的具体实现. 以下为类的定义: ...

  10. java中file类_Java中file类

    File类的概述:File更应该叫做一个路径,文件路径或者文件夹路径 ,路径分为绝对路径和相对路径,绝对路径是一个固定的路径,从盘符开始,相对路径相对于某个位置,在eclipse下是指当前项目下,在d ...

最新文章

  1. 大佬带你深入浅出Lua虚拟机
  2. python用类名直接调用方法_Python类的实例方法、静态方法、类方法详解,附代码示例...
  3. boost::container模块实现节点句柄的测试程序
  4. 【NOIP2018】DAY2T2——填数游戏(轮廓线状压的dp?搜索打表)
  5. Java Attach API
  6. java可以看懂php代码吗_可以自己给自己理发吗?看懂这六点细节就能给自己理发了...
  7. [转载]Memcached缓存服务的简单安装
  8. jQuery:获取浏览器中的分辨率
  9. oj交java代码_UvaOJ java输入代码
  10. 国网376.1协议报文地址域
  11. 图片标注工具Labelme-简明使用教程
  12. 100个日常实用脚本
  13. [转]决定人生的三种成本:机会成本,沉没成本,边际成本
  14. Discriminative Locality Alignment (DLA)
  15. opencv 通过标定摄像头测量物体大小_激光三角测量法在工业视觉检测上的应用...
  16. 【Unity游戏开发笔记】手游-涂鸦弹跳开发分析
  17. c语言60题,C语言复习60题
  18. 基于SpringBoot前后端分离的众筹系统(附源码)
  19. 移动端长按文本选择复制
  20. 《Linux运维总结:内网服务器通过代理访问外网服务器(方法一)》

热门文章

  1. linux设备驱动模型大剖析(1)-----底层阶级的程序猿
  2. 智慧政府:大数据治国时代的来临 - 电子书下载(高清版PDF格式+EPUB格式)
  3. Acme CAD Converter 8.9.8.1480 汉化破解版本
  4. 手机HiFi嗨不嗨 看完这些才能算是入坑
  5. docker-compose 启动顺序的问题depends_on
  6. 旧手机上的微信数据丢失怎么才能恢复回来
  7. 微信小程序获取数据并展示
  8. matlab汽车牌的识别,matlab车牌号识别
  9. c语言上机实验报告河南理工大学,河南理工大学单片机实验报告格式.doc
  10. iPad2如何从iOS6降级到5.1.1