《Java数据结构》链表结构(单向链表,双向链表)
单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始;链表是使用指针进行构造的列表;又称为结点列表,因为链表是由一个个结点组装起来的;其中每个结点都有指针成员变量指向列表中的下一个结点;

单向链表:
/**
* 单向链表
*/
public class ListNode {
Integer val;
ListNode next; //下一个节点 public ListNode(Integer x) { val = x; } }
/**
* 创建一个单向链表结构
* 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9
*/
public class ListDemo {
public static void main(String[] args) {
//创建链表
ListNode listNodeTmp = new ListNode(-1);
ListNode listNodeStart = listNodeTmp;
for (int i = 1; i < 10; i++) {
ListNode listNode = new ListNode(i);
listNodeTmp.next = listNode;
listNodeTmp = listNode;
} //打印链表
ListNode listNodeQuery = listNodeStart.next; //listNodeQuery相当于指针,指向哪个节点
StringBuilder stringBuilder = null;
while(listNodeQuery !=null){ //指向位置是否为空
if(stringBuilder == null){
stringBuilder = new StringBuilder();
stringBuilder.append(listNodeQuery.val);
}else{
stringBuilder.append(" -> "+ listNodeQuery.val);
}
listNodeQuery = listNodeQuery.next; // 指向下一个节点
}
System.out.println(stringBuilder.toString());
}
}
运行结果:

双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。

双向链表:
public class DoubleListNode {
Integer val;
DoubleListNode next; //下一个节点
DoubleListNode pro; //上一个节点
public DoubleListNode(Integer x) { val = x; }
}
/**
* 创建一个双向向链表结构(1 指向 2 的同时2 也指向 1)
* 1 <-> 2 <-> 3 <-> 4 <-> 5 <-> 6
*/
public class DoubleListDemo {
public static void main(String[] args) {
//创建链表
DoubleListNode doubleListNodeTmp = new DoubleListNode(-1);
DoubleListNode doubleListNodeStart = doubleListNodeTmp;
for (int i = 1; i < 10; i++) {
DoubleListNode doubleListNode = new DoubleListNode(i);
doubleListNodeTmp.next = doubleListNode;
doubleListNode.pro = doubleListNodeTmp;
doubleListNodeTmp = doubleListNode;
} DoubleListNode doubleListNodeQuery = doubleListNodeStart.next.next.next; //指向3的位置
//获取自身
System.out.println("节点自身:"+doubleListNodeQuery.val);
//获取上一个节点.
System.out.println("上一个节点:"+doubleListNodeQuery.pro.val);
//获取下一个节点.
System.out.println("下一个节点:"+doubleListNodeQuery.next.val);
}
}
运行结果:

《Java数据结构》链表结构(单向链表,双向链表)的更多相关文章
- 自己动手实现java数据结构(二) 链表
1.链表介绍 前面我们已经介绍了向量,向量是基于数组进行数据存储的线性表.今天,要介绍的是线性表的另一种实现方式---链表. 链表和向量都是线性表,从使用者的角度上依然被视为一个线性的列表结构.但是, ...
- Java数据结构和算法(四)--链表
日常开发中,数组和集合使用的很多,而数组的无序插入和删除效率都是偏低的,这点在学习ArrayList源码的时候就知道了,因为需要把要 插入索引后面的所以元素全部后移一位. 而本文会详细讲解链表,可以解 ...
- JS数据结构与算法--单向链表
链表结构:链表中每个元素由一个存储元素本身的节点和一个指向下一元素的引用组成.如下所示(手画的,比较丑,懒得用工具画了,嘻嘻) 1.append方法,向链表末尾插入一个节点 2.insert(posi ...
- Python3玩转单链表——逆转单向链表pythonic版
[本文出自天外归云的博客园] 链表是由节点构成的,一个指针代表一个方向,如果一个构成链表的节点都只包含一个指针,那么这个链表就是单向链表. 单向链表中的节点不光有代表方向的指针变量,也有值变量.所以我 ...
- Java数据结构和算法之链表
三.链表 链结点 在链表中,每个数据项都被包含在‘点“中,一个点是某个类的对象,这个类可认叫做LINK.因为一个链表中有许多类似的链结点,所以有必要用一个不同于链表的类来表达链结点.每个LINK对象中 ...
- [Java算法分析与设计]--单向链表(List)的实现和应用
单向链表与顺序表的区别在于单向链表的底层数据结构是节点块,而顺序表的底层数据结构是数组.节点块中除了保存该节点对应的数据之外,还保存这下一个节点的对象地址.这样整个结构就像一条链子,称之为" ...
- C语言 - 基础数据结构和算法 - 单向链表
听黑马程序员教程<基础数据结构和算法 (C版本)>,照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友可 ...
- java笔试之从单向链表中删除指定值的节点
输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针. 链表的值不能重复 构造过程,例如 1 -> 2 3 -> 2 5 -> 1 4 ...
- python数据结构链表之单向链表
单向链表 单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域.这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值. 表元素域ele ...
随机推荐
- eNSP仿真软件之配置Trunk口
实验原理 在以太网中,通过划分VLAN来隔离广播域和增强网络通信的安全性.以太网通常由多台交换机组成,为了使VLAN的数据帧跨越多台交换机传递,交换机之间互连的链路需要配置为干道链路(Trunk Li ...
- KubeCon 2019 北美会议完美落幕 | 云原生生态周报 Vol. 29
作者 | 陈俊.张晓宇.徐迪 业界要闻 KubeCon 2019 北美会议召开 业界最隆重的盛会 KubeCon+CloudNativeCon 今年在圣地亚哥举办,超过 12000 名参会者以及 10 ...
- Markdown学习笔记(一)
解决Markdown文件插入图片无法只能本地查看的问题 原因:图片的显示与图片地址关联,写入Markdown时用的本机地址,一旦上传到网络,地址就发生了变化,也就显示不了图片. 寻找免费的图床网站. ...
- 2019-11-22:xss绕过笔记
xss变形 大小写混合,sCRipt重复写,scrscriptipt通过某些标签来src属性,构造pyload,src找不到数据源的时候内部会出错,此时使用onerror触发,或iframe标签,&l ...
- linux 内核版本和发行版本区别
内核版本:我的理解是,内核是系统的心脏,是linux中最基层的代码.版本号如 Linux version 3.10.0-514.el7.x86_64 查看内核版本可使用.uname -a 或者cat ...
- win上找到host文件的方法
在运行的位置输入 C:\WINDOWS\system32\drivers\etc
- 音频工具kaldi部署及模型制作调研学习
语音识别简介 语音识别(speech recognition)技术,也被称为自动语音识别(英语:Automatic Speech Recognition, ASR).计算机语音识别(英语:Comput ...
- day28
断点调试 在想要加断点的地方用鼠标点击一下,你会看到一个红色圆圈 变红的地方,程序执行到,就会暂停 断点应该加在报错之前 绿色箭头表示快速跳到下一个断点执行 控制台报错,点击你能看懂的最后一行,光标会 ...
- 重写TabBar遇到的按钮不显示的问题
这里的控件frame没有进行设置,无法显示 这里初始化的按钮 frame也为0, 因此 在 重写某个控件的时候 一定要调用layoutSubviews这个方法来对这个控件内部的子控件进行赋值
- Linux系统通过FTP进行文档基本操作【华为云分享】
[摘要] Linux系统里通过FTP可以对文档进行上传,更改权限和基本的文档管理. 获得Linux系统后,不熟悉命令操作的情况下,可以通过FTP工具进行文档操作,下面以WinSCP工具为例进行讲解: ...