Java模拟一个简单的双向链表

2023-11-02

Java模拟一个简单的双向链表

1.链表结构

Node实体类代码:

public class Node {
    public Object item;//存放数据的地方
    public Node next;//指向下一个结点
    public Node pre;//指向上一个结点

    public Node(Object obj) {
        this.item = obj;
    }

    public String toString() {
        return "Node name=" + item;
    }
}

2.测试类

package com.swift.collection.list;

import com.swift.pojo.Node;

/**
 * @Author swift
 * @Date 2022/8/15 15:27
 * @PackageName:com.swift.collection.list
 * @ClassName: LinkedList01
 * @Description: TODO
 * @Version 1.0
 */
public class LinkedList01 {
    public static void main(String[] args) {
        //创建三个结点
        Node node1 = new Node("石原里美");
        Node node2 = new Node("仓木麻衣");
        Node node3 = new Node("新垣结衣");
        //连接结点
        /*node1->node2->node3*/
        node1.next = node2;
        node2.next = node3;

        /*node3->node2->node1*/
        node3.pre = node2;
        node2.pre = node1;

        Node firstNode = node1;//双向链表的头结点 firstNode引用指向node1
        Node lastNode = node3;//双向链表的尾结点 lastNode引用指向node3
        System.out.println("====初始链表从头到尾遍历====");
        //从头到尾遍历
        while (true) {
            if (firstNode == null) {
                break;
            }
            System.out.println(firstNode);
            firstNode = firstNode.next;
        }
        //从尾到头遍历
        System.out.println("====初始链表从尾到头遍历====");
        while (true) {
            if (lastNode == null) {
                break;
            }
            System.out.println(lastNode);
            lastNode = lastNode.pre;
        }
        //双向链表添加数据/对象,eg:在仓木麻衣和新垣结衣中间添加一个坂井泉水
        Node insertNode = new Node("坂井泉水");
        /*将坂井泉水加入到链表*/
         insertNode.pre=node2;
         insertNode.next=node3;
         node2.next=insertNode;
         node3.pre=insertNode;
        System.out.println("--在仓木麻衣和新垣结衣中间添加一个坂井泉水从头到尾遍历--");
        //从头到尾遍历
        firstNode=node1;//first再次指向node1
        while (true) {
            if (firstNode == null) {
                break;
            }
            System.out.println(firstNode);
            firstNode = firstNode.next;
        }
        System.out.println("--在仓木麻衣和新垣结衣中间添加一个坂井泉水从尾到头遍历--");
        //从尾到头遍历
        lastNode=node3;//last再次指向node3
        while (true) {
            if (lastNode == null) {
                break;
            }
            System.out.println(lastNode);
            lastNode = lastNode.pre;
        }
    }
}

3.图解

4.测试结果

在这里插入图片描述

====初始链表从头到尾遍历====
Node name=石原里美
Node name=仓木麻衣
Node name=新垣结衣
====初始链表从尾到头遍历====
Node name=新垣结衣
Node name=仓木麻衣
Node name=石原里美
--在仓木麻衣和新垣结衣中间添加一个坂井泉水从头到尾遍历--
Node name=石原里美
Node name=仓木麻衣
Node name=坂井泉水
Node name=新垣结衣
--在仓木麻衣和新垣结衣中间添加一个坂井泉水从尾到头遍历--
Node name=新垣结衣
Node name=坂井泉水
Node name=仓木麻衣
Node name=石原里美
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java模拟一个简单的双向链表 的相关文章

随机推荐

  • 【学习笔记】大指数的两种处理方法——欧拉降幂和数学模拟

    问题背景 描述 题目范围 我们可以看到 y 的数位最长达1e5 1 远远超过了任何一个数据类型的范围 那我们如何计算像这样的大指数呢 有两种解决方法 我们先学习第一种 算法 欧拉降幂 对于算法欧拉降幂 你需要知道的东西有 1 欧拉函数 2
  • 前端项目使用小记

    main var prefix contextPath class manager classManager function load function load exampleTable bootstrapTable method ge
  • js取值

    取普通值 外层变量名 里层变量名 取数组 外层变量名 数组名 索引 里面的变量 ajax url newGoods to listVe type POST data type a success function data if data
  • STL nth_element排序算法

    nth element 算法和 partial sort 不同 应用的范围由它的第一个和第三个参数指定 第二个参数是一个指向第 n 个元素的迭代器 如果这个范围内的元素是完全有序的 nth dement 的执行会导致第 n 个元素被放置在适
  • STM32通用定时器(原理、结构体、库函数、定时器中断每秒闪烁一次灯) —— 时钟源、分频值、重装载值

    参考 stm32定时器与定时器中断 作者 打酱油的 发布时间 2021 04 11 01 04 09 网址 https blog csdn net weixin 46098612 article details 115493737 参考 s
  • git 拉取大文件超时解决方案

    1 设置深度 git clone depth 1 https gitee com tcwong pengExpressMS git cd yyyy 目录下 2 配置文件 git config add core compression 1 3
  • Git实战之git客户端上传文件到github

    Git实战之git客户端上传文件到github 一 Git介绍 1 Git简介 2 版本控制系统的分类 二 检查本地系统版本 三 windows安装Git客户端 1 进入windows的powershell 2 安装git客户端 3 检查安
  • 阿里云服务器部署flask项目「gunicorn + nginx + 支持https」

    最近做了一个微信小程序 使用 flask 实现了对应的后台 上线需要部署到服务器上 之前只是了解并没有全链路试过 靠着网上的资料最终完成部署上线 但中间遇到了较多的一些问题 网上的资料也比较零碎 所以整理了这篇文章 一方面是作为记录方便后续
  • JSP关闭触发事件,当点关闭页面按钮触发JS函数、事件,调用退出方法

    JSP控制关闭浏览器调用事件 第一种方法 window onbeforeunload function var n window event screenX window screenLeft var b n gt document doc
  • 关于虚拟化的问题解决记录

    一 背景 在去年购买了机械革命Code1 搭配的AMD芯片 但是由于虚拟化问题 虚拟机和Docker都迟迟没有进行安装 最近由于上Linux和学习云原生等 必须得安装 以下则进行了一些探索 解决 二 问题记录 关于Code1的虚拟化 对于机
  • 查看文件大小ls -l

  • Redis 基本属性

    redis 概念 redis是一个存储key value的非关系型数据库 数据存储在缓存中 读取速度很快 可以很好的解决每次都去数据库执行数据查询时间消耗问题 数据库支持的并发有限 redis单机可以支持上万并发 作用 缓存高频读的数据 减
  • linux sudo su 免密码,Ubuntu的sudo免密码设置

    正常情况下 在使用sudo命令时 系统是要求输入密码的 输入的密码会保存一小段时间 在这段时间内 sudo不再要求输入密码 之后 再使用sudo 系统仍会要求输入密码 但是在制作镜像过程中 我们可能会在系统自启动项启动很多服务 而且可能有些
  • 使用VS2019将c#生成dll文件

    生成dll部分 1 新建一个项目 选择 类库 用于创建C 类库dll项目 2 将Class1 cs改名自己要创建的文件名 Operate cs 并填入代码 3 贴入代码 using System using System Collectio
  • C++数据结构之--单向链表(SingleList)

    单向链表 单向链表 Singly Linked List 是一种常见的数据结构 它由一系列节点 Node 构成 每个节点包含数据 value 和一个指向下一个节点的指针 next 每个节点只知道它指向的下一个节点 而无法直接访问前一个节点
  • 设置多个dns_公共DNS全面故障:114.114.114.114 和 8.8.8.8

    2019年4月4日上午 全国大范围内的互联网用户在使用114 114 114 114 和 8 8 8 8 DNS服务器时 出现网站打开缓慢 或者打不开等现象 本次收到影响的地区包括北京 陕西 四川 重庆 贵州 广西 湖北 江西以及上海等地
  • 17、 Flutter Widgets 之 内置各种Button

    flutter内置各种buttons Author wywinstonwy Date 2022 1 2 10 52 下午 Description import package demo202112 utils common appbar d
  • 如何实现百度的跨域案例?

  • 前端开发-echarts 横坐标与数据动态变化

    在这次项目开发中使用了ajax 进行前端和后端的数据交互 获取数据使用定时器 本文以横坐标动态变化的折线图为例进行说明 最终效果在文末 但是横坐标会随时间不停变化 在JS中 首先要初始化一个div来存放echarts
  • Java模拟一个简单的双向链表

    Java模拟一个简单的双向链表 1 链表结构 Node实体类代码 public class Node public Object item 存放数据的地方 public Node next 指向下一个结点 public Node pre 指