java单链表反转

news2024/9/23 19:16:58

 

我们都知道在 Java中,如果要创建一个对象,我们可以通过创建一个空的对象来实现。如果创建一个空的对象,我们会很容易实现,但是如果创建一个链表的话,我们就需要利用到反链表技术。 在 Java中,反转链表有两种方式,第一种是通过使用指针来实现反转;第二种是通过使用哈希表来实现反转。 第一种方式是简单的,因为指针比较简单,所以它比较容易实现;而哈希表更加复杂一点,因为它比较多的时候会出现冲突问题。如果要实现反转链表的话,就需要使用到哈希表的特性了。 在我们学习 java中单链表反转的时候,会涉及到一个叫 myVector的东西。因为 myVector是一种指针变量,我们在使用链表进行存储的时候,会出现一个问题。在存储单链表中的时候,如果我们不进行操作的话就会出现冲突问题。为了解决这个问题,我们可以利用一个哈希表来实现单链表反转。下面我们通过一个例子来理解一下单链表反转的操作。 假设有一个数组叫 double [3]()。这个数组中包含了所有数字1到3。那么我们要对数组进行操作的话就需要使用到哈希表技术了。

  • 一、对哈希表进行初始化

    在 java中,对哈希表进行初始化的时候,我们可以先使用 private关键字来访问哈希表中的数据。然后我们再将 private关键字的值设置为1,这样我们就完成了对哈希表的初始化操作。 在对哈希表进行初始化的时候,我们可以将其内部数据结构进行初始化操作。比如说将数据结构中的数组类型转换为指针类型等操作,这样我们就可以将哈希表进行初始化。因为在 java中,每个数组都是有一个地址的。而每个指针变量都是一个指针变量。所以当我们对数组进行初始化的时候,我们就会知道数组中有多少个指针变量。 在 private关键字中,我们可以将数组中所有数字的哈希值都赋给一个新值。比如说我们对 double [3]()中的数据进行初始化的时候,就可以将数组中所有数字的哈希值都赋给一个新值: 比如说把所有数字从0到9按照升序排列,这样可以使得所有数字在数组中的位置发生变化。为了能够更好地了解排序操作,我们可以将数组中的数据按照升序排列。 在对哈希表进行初始化操作之前,我们需要知道哈希表中有哪些元素。比如说在哈希表中,它包含了2个指针变量 double和 doubleVector。如果不知道这些数据类型的话,那么我们就无法对哈希表进行初始化操作了。 比如说链表结构就是一个有序链表。但是在 Java中并不是所有链表都是有序链表。如果一个链表结构是有序链表的话,那么它的头节点就应该在当前节点之前;如果是无序链表的话,那么头节点就应该在当前节点之后。 下面我们来看一下 Java中如何进行链表头节点的定位操作。在 Java中有两种定位方法:指针定位和哈希表定位法。这两种方法都可以进行链表头节点定位操作,下面我们就来分别了解一下这两种方法: 我们来看一下上面给出的代码: 上面给出的代码只给出了一种方式来确定一个链表结构是有序还是无序的,如果不知道该如何判断的话,那么我们就可以通过上面给出的代码进行判断; 在上面给出的代码中,我们可以通过哈希表头节点来确定当前链表头节点到底是什么数据类型; 现在我们了解了链表和哈希表头节点定位方法之后,下面我们来看一下 java中链表和哈希表头节点具体实现:

  • 二、将数组中的数字1到3分别赋值给哈希表中的某个元素

    在上面的例子中,我们已经把第一个哈希表中的数字1赋值给了哈希表中的数字2。现在我们需要将哈希表中的1到3分别赋值给第一个哈希表中的数字3和第二个哈希表中的数字4。那么这个时候,我们就需要使用到一个指针变量,来将这个指针指向第一个哈希表中的数字1。接下来就是使用链表技术来反转链表了。 那么什么是哈希表技术呢?它其实就是一种链式结构。它在Java2中也叫做双向链式结构,它的结构其实就是一个数组,数组里面的数字1和3分别代表了数组里面的元素1和3。但是它和我们平时使用的链式结构有一个不同点,就是我们在使用哈希表技术进行反转时,会先将数组中所有元素都反转一次。下面我们来看一下哈希表技术是如何反转数组的:

    • 1、将数组中的元素都反转一次

      在上面的例子中,我们已经把哈希表中的1和3分别赋值给了两个不同的变量,现在我们需要将两个变量都反转一次。 这是因为,在Java2中,每一个元素都代表了一个字节,所以如果我们想要反转数字1和数字3的话,我们只需要把它们都反转一次就可以了。 在上面的代码中,我们首先定义了一个指针变量x来存储哈希表中的1和3,然后我们在哈希表中增加了一个变量 xmode来存储哈希表中的元素。最后我们在哈希表中添加了两个指针变量xmedium1和xmedium3来分别指向两个不同的元素。这是一个非常简单的例子,具体代码如下:

    • 2、将反转后的元素赋值给哈希表中的某个元素

      当我们需要将哈希表中的某个元素赋值给另一个哈希表中的某个元素时,我们同样需要使用到指针变量。首先,我们需要先在哈希表中创建一个指向下一个哈希表中元素的指针变量。接着,我们要将这个指针变量赋值给下一个哈希表中的某个元素。这样做的目的,就是为了让下一个哈希表中的某个元素,能够将自己的值赋给当前哈希表中的某个元素。 接着我们就可以使用这个指针变量来赋值给我们想要赋值给的对象了。当我们将指针变量赋值给哈希表中的某个元素时,其实就是将这个对象指向了另一个哈希表中的某个元素。这样做可以使我们在链式结构中对某一个对象进行赋值,避免了重复操作。

  • 三、使用哈希表对该元素进行反转

    使用哈希表技术,我们可以将一个元素存储在哈希表中。然后我们可以对这个元素进行反转操作,以达到反转效果。 下面是使用哈希表来反转 double [3]()的代码: 这个代码中,我们首先在哈希表中建立了一个数组,然后我们创建了一个哈希表对象。然后我们使用哈希表中的元素来对 double [3]()进行反转操作。最后我们再将反转后的数组修改为原来数组的值,这就是通过哈希表实现单链表反转的过程了。

以下是三种常用的Java单链表反转代码:

方法一:迭代法
```java
public ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode curr = head;
while (curr != null) {
ListNode nextTemp = curr.next;
curr.next = prev;
prev = curr;
curr = nextTemp;
}
return prev;
}
```
方法二:递归法
```java
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode p = reverseList(head.next);
head.next.next = head;
head.next = null;
return p;
}
```
方法三:头插法
```java
public ListNode reverseList(ListNode head) {
ListNode dummy = new ListNode(0);
while (head != null) {
ListNode next = head.next;
head.next = dummy.next;
dummy.next = head;
head = next;
}
return dummy.next;
}
```

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/488613.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解锁音视频开发技巧,投身新时代的互联网浪潮

前言 音视频应用范围广泛,涵盖了许多不同的领域和行业。下面列出一些常见的音视频应用: 通信:音视频通讯是当今普遍使用的一种方式,包括互联网电话、视频会议、视频聊天应用等。娱乐:音视频内容在娱乐行业中应用广泛…

五一去淄博只撸串?用VR云游看看隔壁这个的宝藏地

卷饼、小葱、烤肉串…… 最近的淄博真是火出圈了 全网刷屏 吸引了全国各地网友的味蕾 有多少人铆足了劲 准备趁着五一小长假“进淄赶烤”的? 五一山东行, 当然不能只“炫”一顿烧烤 美食美景不止淄博 在淄博隔壁,还有这么一座宝藏城市…

Springboot +Flowable,设置任务处理人的四种方式(二)

一.简介 上一篇文章介绍了学习UserTask 设置用户的两种方式,这篇下UserTask 设置用户的其他方式。 流程图还是之前那个: 二.第三种:通过监听器设置 我可以通过监听器来设置任务的处理人。具体方式如下: 首先我们在绘制流程图…

你真的会搭建框架吗?自动化测试框架精细整理,框架看这一篇就够了...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 无论是在自动化测…

Python文件和操作系统基础

文章和代码等已经归档至【Github仓库:https://github.com/timerring/dive-into-AI 】或者【AIShareLab】回复 python数据分析 也可获取。 文章目录 文件和操作系统文件的字节和Unicode 文件和操作系统 代码示例大多使用诸如 pandas.read_csv 之类的高级工具将磁盘上…

板卡设计资料原理图:536-基于FMC接口的XCZU7EV通用PCIe卡主控计算卡工业控制卡PCIe卡FMC接口卡

基于FMC接口的XCZU7EV 通用PCIe卡 一、板卡简介 基于3U PXIe的ZU11EG/ZU7EG/ZU7EV的通用 ,实现FMC的数据接口和主控计算,广泛应用于工业控制,检测,视觉处理。支持工业级温度工作。 二、主要功能 1、板卡核心芯…

html+css学习(中)

css其它选择器 1,根据属性名称选择元素 例img[title]{width:200px}表示带有title属性的元素 2&#xff0c;根据属性值选择元素 [attribute-value]表示匹配某个属性为value的元素 [classone]{color:red;} css伪类 1&#xff0c;状态伪类 < a>< /a> 名字为< a&…

机器学习实战教程(十一):支持向量机SVM

什么是SVM&#xff1f; VM的英文全称是Support Vector Machines&#xff0c;我们叫它支持向量机。支持向量机是我们用于分类的一种算法。让我们以一个小故事的形式&#xff0c;开启我们的SVM之旅吧。 在很久以前的情人节&#xff0c;一位大侠要去救他的爱人&#xff0c;但天空…

买入苹果公司股票的三个理由

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 苹果股票的关键指标 苹果公司&#xff08;AAPL&#xff09;在2023财年第一季度财报发布会上透露&#xff0c;其“活跃设备安装数量”在七年内已经增长了100%&#xff0c;达到了20亿部&#xff0c;这相当于年复合年增长率已…

Vue---Vuex状态管理核心

目录 一、Vuex是干什么的 二、Vuex状态管理核心 &#xff08;1&#xff09;State &#xff08;2&#xff09;Getter &#xff08;3&#xff09;Mutation &#xff08;4&#xff09;Action 一、Vuex是干什么的 vuex的出现就是为了更加方便地管理组件之间的数据交互&#xf…

SpringMVC与SpringWebFlux

文章目录 Spring MVCMVC架构请求处理流程语法代码示例 Spring WebFlux请求处理流程语法代码示例 两者使用对比及建议 Spring MVC Spring Web MVC是建立在Servlet API上的原始Web框架&#xff0c;从一开始就包含在Spring框架中。正式名称 "Spring Web MVC "来自其源模…

控制系统的扰动补偿

名义模型干扰观测器 理论推导 所谓被控对象的名义模型&#xff0c;就是说&#xff0c;实际被控对象无论是通过系统建模还是系统辨识&#xff0c;都无法获得十分精确的参数&#xff0c;名义模型就是与实际系统模型相近的模型&#xff0c;可近似二者相同&#xff0c;即 则 连…

MySQL:常见运算符

前言&#xff1a; 五一过后&#xff0c;我又来啦&#xff01;狂玩五天&#xff0c;放松好心情~ MySQL中的运算符有以下4类&#xff0c;分别是&#xff1a;算数运算符&#xff0c;比较运算符&#xff0c;逻辑运算符&#xff0c;位操作运算符。 算数运算符&#xff1a; 有一定…

【hello Linux】vscode的下载与远程登陆

目录 1. vscode的下载 2. 使用vscode远程登陆至xshell 3. vscode背景颜色的设置 Linux&#x1f337; 1. vscode的下载 1. 点击下方链接进入vscode官网&#xff0c;选择自己所需的vscode版本&#xff0c;直接下载&#xff1b; vscode官网 2. 按如下步骤安装vscode&#xff1b…

USART串口发送

文章目录 运行环境&#xff1a;1.1 串口发送1)用户手册2)原理图 2.1配置1)串口引脚配置2)通讯配置3)RCC和SYS 3.1代码分析3.2添加代码1)串口发送函数2)硬件和驱动安装3)launch设置 4.1实验效果 运行环境&#xff1a; ubuntu18.04.melodic 宏基暗影骑士笔记本 stm32f427IIH6 st…

支持轴体热插拔的平价机械键盘,全尺寸带灯效,雷柏V700DIY上手

日常工作娱乐中少不了键盘&#xff0c;这两年定制化的机械键盘很受欢迎&#xff0c;不过动辄上千的发烧键盘还是让很多朋友望而却步&#xff0c;好在目前市面上也有不少平价款的DIY键盘可以选择&#xff0c;像是我现在用的这款雷柏 V700DIY&#xff0c;就可以轻松定制&#xff…

Distilling Step-by-Step: 可以用更少的训练数据与模型尺寸战胜同级别的LLM!

Distilling Step-by-Step: 可以用更少的训练数据与模型尺寸战胜同级别的LLM&#xff01; IntroductionMethod实验参考 Introduction 作者提到部署大模型存在时延、内存、算力等挑战&#xff0c;所以目前的趋势是微调、蒸馏一个不是很大的语言模型&#xff0c;如Vicuna、Alpaca…

一个WPF开发的、界面简洁漂亮的音频播放器

今天推荐一个界面简洁、美观的、支持国际化开源音频播放器。 项目简介 这是一个基于C# WPF开发的&#xff0c;界面外观简洁大方&#xff0c;操作体验良好的音频播放器。 支持各种音频格式&#xff0c;包括&#xff1a;MP4、WMA、OGG、FLAC、M4A、AAC、WAV、APE 和 OPUS&…

【Python入门知识】NumPy数组迭代及连接

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 数组迭代 迭代意味着逐一遍历元素&#xff0c;当我们在 numpy 中处理多维数组时&#xff0c; 可以使用 python 的基本 for 循环来完成此操作。 如果我们对 1-D 数组进行迭代&#xff0c;它将逐一遍历每个元素。 实例 迭…

openSUSE----openSUSE开启sshd服务

【原文链接】openSUSE----openSUSE开启sshd服务 &#xff08;1&#xff09;首先修改配置&#xff0c;编辑 vi /etc/ssh/sshd_config 文件&#xff0c;将如下两个字段设置为yes PermitRootLogin yes PasswordAuthentication yes&#xff08;2&#xff09;然后搜索firewall&…