《Java数据结构》链表结构(单向链表,双向链表)

时间:2022-12-13 21:16:10

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

《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());
}
}

运行结果:

《Java数据结构》链表结构(单向链表,双向链表)

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

《Java数据结构》链表结构(单向链表,双向链表)

双向链表:

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数据结构(二) 链表

    1.链表介绍 前面我们已经介绍了向量,向量是基于数组进行数据存储的线性表.今天,要介绍的是线性表的另一种实现方式---链表. 链表和向量都是线性表,从使用者的角度上依然被视为一个线性的列表结构.但是, ...

  2. Java数据结构和算法&lpar;四&rpar;--链表

    日常开发中,数组和集合使用的很多,而数组的无序插入和删除效率都是偏低的,这点在学习ArrayList源码的时候就知道了,因为需要把要 插入索引后面的所以元素全部后移一位. 而本文会详细讲解链表,可以解 ...

  3. JS数据结构与算法--单向链表

    链表结构:链表中每个元素由一个存储元素本身的节点和一个指向下一元素的引用组成.如下所示(手画的,比较丑,懒得用工具画了,嘻嘻) 1.append方法,向链表末尾插入一个节点 2.insert(posi ...

  4. Python3玩转单链表——逆转单向链表pythonic版

    [本文出自天外归云的博客园] 链表是由节点构成的,一个指针代表一个方向,如果一个构成链表的节点都只包含一个指针,那么这个链表就是单向链表. 单向链表中的节点不光有代表方向的指针变量,也有值变量.所以我 ...

  5. Java数据结构和算法之链表

    三.链表 链结点 在链表中,每个数据项都被包含在‘点“中,一个点是某个类的对象,这个类可认叫做LINK.因为一个链表中有许多类似的链结点,所以有必要用一个不同于链表的类来表达链结点.每个LINK对象中 ...

  6. &lbrack;Java算法分析与设计&rsqb;--单向链表&lpar;List&rpar;的实现和应用

    单向链表与顺序表的区别在于单向链表的底层数据结构是节点块,而顺序表的底层数据结构是数组.节点块中除了保存该节点对应的数据之外,还保存这下一个节点的对象地址.这样整个结构就像一条链子,称之为" ...

  7. java笔试之从单向链表中删除指定值的节点

    输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针. 链表的值不能重复 构造过程,例如 1 -> 2 3 -> 2 5 -> 1 4  ...

  8. python数据结构链表之单向链表

    单向链表 单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域.这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值. 表元素域ele ...

  9. java数据结构--线性结构

    一.数据结构 数据结构由数据和结构两部分组成,就是将数据按照一定的结构组合起来,这样不同的组合方式有不同的效率,可根据需求选择不同的结构应用在相应在场景.数据结构大致 分为两类:线性结构(如数组,链表 ...

随机推荐

  1. ASP&period;NET Web API自身对CORS的支持:从实例开始

    在<通过扩展让ASP.NET Web API支持W3C的CORS规范>中我们通过自定义的HttpMessageHandler为ASP.NET Web API赋予了跨域资源共享的能力,具体来 ...

  2. ReceiveQueue

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace NetF ...

  3. php中cookie技术关于跨目录调用cookie值的问题

    今天做项目发现了一个奇葩错误,以cookie技术为主,反复测试发现cookie不能跨目录调用. 我在F:wamp\www\test\下面有1.php和2.php其中1.php接受2.php中setco ...

  4. 关于stm32的正交解码

    关于正交解码,我先解释何为正交解码,,,,其实名字挺高大上的,,,,还是先说编码器吧 看一下我用过的一种编码器 编码器的 线 数 ,是说编码器转一圈输出多少个脉冲,,,如果一个编码器是500线,,,说 ...

  5. &lbrack;ZZ&rsqb; Cache

    http://blog.sina.com.cn/s/blog_6472c4cc0102duzr.html 处理器微架构访问Cache的方法与访问主存储器有类似之处.主存储器使用地址编码方式,微架构可以 ...

  6. 创建动态组-以OU为单位

    选择“Windows 计算机”为对象,因为监视对象是以计算机为单位 ==================== 以下方式则无组成员返回: 此时要求返回的对象为AD用户或组,猜测SCOM没有监视到该用户或 ...

  7. HBase in 2013

    2013年马上就要过去了,总结下这一年HBase在这么一年中发生的主要变化.影响最大的事件就是HBase 0.96的发布,代码结构已经按照模块化release了,而且提供了许多大家迫切需求的特点.这些 ...

  8. SQL Syscolumns

    每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行.该表位于每个数据库中. 列名 数据类型 描述 name sysname 列名或过程参数的名称. id int 该列所属的表对象 I ...

  9. WebSockets介绍

    Web sockets定义为在servers和clients之间的双向连接.意味着servers和clients可以同时交流并发送数据.这种协议是从底层就是双工连接.Web sockets技术上得到了 ...

  10. (10&period;23)Java小知识!

    ---恢复内容开始--- 方法的定义: 一般情况下,定义一个方法包含以下语法: 修饰符 返回值类型 方法名 (参数类型 参数名 , ...){ ... 方法体 ... return 返回值; } 修饰 ...