【刷题】【力扣牛客】反转链表的五种方式——Java
文章目录
- 前言
- 方法一:构造新链表(构造新节点)
- 方法二:构造新链表(不构造新节点)
- 方法三:递归
- 方法四:双指针
- 方法五:遍历
- 总结
力扣题目链接:206. 反转链表
牛客题目链接:BM1 反转链表
前言
反转链表作为链表操作的基础是重中之重,以后做比较难的链表题目也可能会需要嵌入反转链表的代码,所以一定要多多练习
方法一:构造新链表(构造新节点)
思路:构造一个新的链表,从旧链表依次拿到每个节点,根据旧链表创建新节点添加至新链表头部,完成后新链表是倒序的
public ListNode reverseList (ListNode head) {//新链表的头节点,还没有元素,定义为nullListNode n1 = null; //设置一个指针,用来遍历旧链表ListNode p = head;//循环遍历旧链表while(p != null){//根据旧链表的值创建新节点,把新节点的next指针设置为新链表的头节点,并更新新链表的头节点n1 = new ListNode(p.val,n1);p = p.next;}//返回新链表的头节点return n1;
}
方法二:构造新链表(不构造新节点)
与方法一类似,构造一个新链表,从旧链表头部移除节点,添加到新链表头部,完成后新链表是倒序的————是不是看完后很蒙,和方法一一样啊,方法一是根据旧链表的值构造节点,方法二是直接使用旧链表的节点,没有创建新的节点
public ListNode reverseList (ListNode head) {ListNode p1 = head;ListNode p2 = null;while(true){//记录旧链表的头指针ListNode first = head;//如果旧链表的指针指向null就退出循环if(first == null){break;}//旧链表向前一步head = head.next;//将旧链表的头指针指向新链表的头first.next = p2;//更新新链表的头指针p2 = first;}return p2;
}
方法三:递归
递归,找到并返回最后一个节点记录为新节点,从倒数第二个开始,将后一个节点的指针指向自己(也就是p.next.next = p),再将自己的next指向null,避免死循环
public ListNode reverseList(ListNode head) {//递归结束条件和链表为空的条件判断if(head == null || head.next == null){return head;}//递归调用,当递归到最后一个节点时返回,也就是反转后的头节点,我们用变量记录下来ListNode newHead = reverseList(head.next);//从倒数第二个节点开始,将后一个节点的指针指向自己head.next.next = head;//将自己的next指针指向null,避免死循环head.next = null;//返回头节点return newHead;
}
方法四:双指针
双指针法:定义两个指针,都先指向头节点。将旧链表指针的下一个节点断开,插入到链表的头节点处,更新新链表的指针
public ListNode reverseList(ListNode head) {//判断链表为空的情况if(head == null){return head;}//定义新链表指针ListNode n1 = head;//定义旧链表指针ListNode o1 = head;//判断条件,旧链表指针的下一个节点不为nullwhile(o1.next != null){//记录旧链表的下一个指针ListNode temp = o1.next;//跳过旧链表指针的下一个节点o1.next = o1.next.next;//将跳过的指针指向头temp.next = n1;//更新新链表的指针n1 = temp;}return n1;}
方法五:遍历
遍历法,定义三个指针,从前向后遍历一遍并更改指针的指向
public ListNode reverseList(ListNode head) {//前指针ListNode prev = null;//当前指针ListNode p = head;//后一个指针ListNode next = null;while(p != null){//后一个指针,为什么要在循环里面赋值呢?避免head为null的情况next = p.next;//将当前指针指向前一个p.next = prev;//更新前指针prev = p;//更新当前指针p = next;}//这里为什么要返回前指针,因为p在循环里面被更新为null,循环才不能进行,所以循环走完后prev的位置是头节点的位置return prev;}
总结
本文讲解了反转指针的五种方法,反转指针是链表操作中的基础,但是特别重要,大家快去练习把~
相关文章:
【刷题】【力扣牛客】反转链表的五种方式——Java
文章目录 前言方法一:构造新链表(构造新节点)方法二:构造新链表(不构造新节点)方法三:递归方法四:双指针方法五:遍历总结 力扣题目链接:206. 反转链表 牛客题…...
使用Java网络编程,窗口,线程,IO,内部类等实现多人在线聊天1.0
1.整体思路 思路图 整体思路如上: 涉及知识点:线程网络编程集合IO等 TCP 协议 2.代码实现过程 服务端 import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import jav…...
相关教程test
第一天 主题:LLM初体验 上午: 一,大模型的发展背景和模型演进 数据增长和算力提升LSTM到BERT到LLM的参数巨变最新paper解读(根据授课时间,选择最近的核心paper进行解读) 二,大模型核心阶段…...
mysql知识分享(包含安装卸载)(一)
如果博客有错误,请佬指正。 目录 注意:打开cmd时要有管理员身份打开,重要 为何使用数据库? 数据库的相关概念 关系型数据库 关系型数据库设计规则 表,记录,字段 表的关联关系 一对一关联 一对多关系 …...
Google Guava 反射工具使用详解
文章目录 反射类操作方法操作字段操作获取注解 反射 在 Guava 中,反射(Reflection)模块提供了一些用于简化反射操作的工具类和方法。通过 Guava 的反射模块,您可以方便地进行类、方法、字段的操作、获取注解信息等。下面详细介绍…...
MySql MVCC 详解
注意以下操作都是以InnoDB引擎为操作基准。 一,前置知识准备 1,MVCC简介 MVCC 是多版本并发控制(Multiversion Concurrency Control)的缩写。它是一种数据库事务管理技术,用于解决并发访问数据库的问题。MVCC 通过创…...
工业机器视觉megauging(向光有光)使用说明书(三,轻量级的visionpro)
下来我们说说第二个相机的添加: 第一步,点击相机二,如下: 第二步,点击:加载工具组.xml,加载toolgroupxml2目录下的:工具组.xml 注意,一个相机只能用一个toolgroupxml,第…...
Linux 环境下,jdbc连接mysql问题
1. 下载MySQL的JDBC驱动: 从MySQL官网下载最新的MySQL Connector/J,并将其解压到某个目录,比如/usr/local/mysql/。 2. 将JDBC驱动添加到类路径: 将JDBC驱动添加到类路径,可以使用以下命令: export CLA…...
Python读写txt文件数据
🎈 博主:一只程序猿子 🎈 博客主页:一只程序猿子 博客主页 🎈 个人介绍:爱好(bushi)编程! 🎈 创作不易:如喜欢麻烦您点个👍或者点个⭐! …...
Linux虚假唤醒
为什么会有虚假唤醒一说。Linux内核这么强大,怎么会出现这样的情况?一直以来也很困惑,看了下文链接中的介绍后,豁然开朗。 从计算机设计的角度,如果一层解决不了,那就再多加一层。推算到这里,就…...
倒计时模块复习
经典回顾倒计时 倒计时的基本布局介绍。 一个内容区域和一个输入区域,内容区域进行划分 直接使用flex布局会更快一点。 js代码 我们利用一下模块化思想,直接把获得时间这个功能写成一个函数。方便后续的调用 function getTime() {const date new Date…...
k8s(三): 基本概念-ReplicaSet与Deployment
PeplicaSet ReplicaSet 的目的是维护一组在任何时候都处于运行状态的 Pod 副本的稳定集合,通常用来保证给定数量的、完全相同的 Pod 的可用性。 最佳实践 Deployment 是一个可以拥有 ReplicaSet 并使用声明式方式在服务器端完成对 Pod 滚动更新的对象。 尽管 Rep…...
Linux 的介绍和云服务器上web 程序部署
目录 一.linux的介绍 1.1linux是什么 1.2linux的发展历程 1.3linux发行版 二.Linux环境搭建 2.1阿里云-云服务器配置 2.2使用终端软件连接Linux 三.操作Linux,部署web程序 3.1Linux指令 3.2部署web程序 第一步:认识yum 第二步:安装…...
Oauth2.0 学习
OAuth 2.0 服务器端通常通过验证每次请求中的访问令牌(access token)的方式来确保其合法性和有效性。以下是一些通常采用的验证方法: Token Validation Endpoint: OAuth 2.0 规范允许实现一个专门的令牌验证端点,称为 Token Valid…...
Elasticsearch:什么是向量数据库?
向量数据库定义 向量数据库是将信息存储为向量的数据库,向量是数据对象的数值表示,也称为向量嵌入。 它利用这些向量嵌入的强大功能来对非结构化数据和半结构化数据(例如图像、文本或传感器数据)的海量数据集进行索引和搜索。 向…...
rename--统一的PRF
基本概念 将ARF/PRF进行合并,合同之后的不见,称之为统一的PRF(Physical Register File);存储的是speculative的,以及正确的(retire)寄存器值; 使用free list,存储PRF中,哪些寄存器是…...
010-editor破解(1)
查看字符串 使用rabin2 -z /home/burning/010editor/010editor | tee 22.txt 查看字符串。 6698 0x003ba380 0x007ba380 68 69 .rodata ascii The password you entered is for an earlier version of this program. 6699 0x003ba3c8 0x007ba3c8 70 71 .rodata ascii You will…...
Ubuntur编译ROS报错:error PCL requires C++14 or above
ubuntu20.04 编译ROS包 报错: error: PCL requires C14 or above: 修改Cmakelists.txt文件: set(CMAKE_CXX_STANDARD 14) 再次编译成功....
17.认识下Docker之docker的核心原理(2)
1.容器-我的小世界 不知道大家看没看过小说《完美时间》,里面石昊经常进入一个小世界在里面与世隔绝的修炼或者战斗,总之就是在一个完全封闭的空间里做他想做的事情而与外界隔离,不受侵扰。通过前面的分析我们知道,Namepace让应用…...
【EasyExcel实践】万能导出,一个接口导出多张表以及任意字段(可指定字段顺序)
文章目录 前言正文一、POM依赖二、核心Java文件2.1 自定义表头注解 ExcelColumnTitle2.2 自定义标题头的映射接口2.3 自定义有序map存储表内数据2.4 表头工厂2.5 表flag和表头映射枚举2.6 测试用的实体2.6.1 NameAndFactoryDemo2.6.2 StudentDemo 2.7 启动类2.8 测试控制器 三、…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...
高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...
