《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 ...
随机推荐
- python:利用celery分布任务
Celery是一个功能完备即插即用的任务队列.它使得我们不需要考虑复杂的问题,使用非常简单.celery看起来似乎很庞大.celery适用异步处理问题,当发送邮件.或者文件上传, 图像处理等等一些比较 ...
- think PHP 查询、更改
最近公司没有什么新项目,故准备搞搞PHP,正好后端有一些小东西需要搞一下,我就来试试吧. PHP 基于think PHP 3 实现功能: 1.为销售绑定虚拟号码分组(查询可以绑定的分组 -> 绑 ...
- Component 和 PureComponent 的区别;复制demo,肉眼可以的区别
React.PureComponent它用当前与之前 props 和 state 的浅比较覆写了 shouldComponentUpdate() 的实现.简单来说,就是PureComponent简单实 ...
- 【Luogu P1714】切蛋糕(面向对象编程首次尝试?)
Luogu P1714 题目的大意就是给定一个长度为n的序列,求出这个序列中长度不超过m的子串的最大和 很容易想出的一个解法就是枚举起点终点,直接暴力扫一遍得出答案. 当然也很容易发现这种做法肯定会T ...
- .net压缩文件
首先nuget安装DotNetZip 代码很少
- java switch语句 要点注意
1.格式 switch(表达式){ case 常量1:语句1:break: case 常量2:语句2:break: case 常量3:语句3:break: .... case 常量n:语句n:brea ...
- Zip压缩工具、tar打包、打包并压缩
第5周第2次课(4月17日) 课程内容: 6.5 zip压缩工具6.6 tar打包6.7 打包并压缩 6.5 zip压缩工具 Zip压缩工具最大的特点就是可以支持压缩目录,也能够压缩文件,Window ...
- 修改python3导致终端打不开
误操作将/usr/bin/python3文件修改,或者删除,导致终端打不开, 解决办法其实很简单,ctrl+alt+f3进入命令窗口,将python2.7的文件拷贝到python中就可以解决了 sud ...
- 理解Redis的单线程模式
0.概述 本文基于的Redis版本为4.0以下,在Redis更高版本中并不是完全的单线程了,增加了BIO线程,本文主要讲述主工作线程的单线程模式. 通过本文将了解到以下内容: Redis服务器采用单线 ...
- hibernate查询方式(二)
1.HQL查询(hibernate query language) 操作的是实体类和属性 *查询所有记录 //1.hql查询操作会使用Query对象 // (1)写sql语句 创建Query对象, S ...