java数据结构与算法刷题-----LeetCode206:反转链表

【链表】反转链表 💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨。 阅读详情
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846
  1. 思路分析
  1. 思路一:递归
  1. 先递归到倒数第二个结点,然后开始反转
  2. 让倒数第二个,到倒数第一个结点的后面(反转),然后倒数第二个结点的next变为null
  3. 依次类推
  1. 思路二:迭代
  1. 三个指针,一个是反转后的头结点pre,一个是当前遍历结点cur,一个用来保存当前结点的后继next
  2. 先保存cur的后继next,它将成为下一个当前结点cur
  3. 然后让cur的后继变为pre,这样cur就到了pre的前面,反转了,现在cur可以看做是反转了一小部分的链表(反转后的头结点)
  4. 然后让pre指向cur,因为pre始终指向反转后的头结点
  5. cur指向next,因为cur始终指向当前遍历结点。
  6. 重复上面步骤,直到反转完成
  1. 代码
    在这里插入图片描述
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    //方式一、递归,让最后一个结点变为头结点
    public ListNode reverseList(ListNode head) {
        //考虑刚一进来,head就为null或者只有一个结点的情况
        if (head == null || head.next == null) {//如果正常递归,到链表末尾的前一个结点,返回当前结点
            return head;
        }
        ListNode newHead = reverseList(head.next);//否则向后递归,head.next是当前结点的后继,是反转后链表结点的前驱
        //head5->next6->null =====>>>> head5->next6->head5
        head.next.next = head;//head.next是反转后的当前结点前驱。它的next应该是当前的head结点。
        //head5->next6->head5 =====>>>> null->next6->head5
        head.next = null;//head.next可以断开连接了,
        return newHead;
    }
    //方式二、迭代
    public ListNode reverseList1(ListNode head) {
        ListNode pre = null;//前驱结点,就是cur的前一个结点,最终就是反转后的头结点。
        ListNode cur = head;//当前结点
        ListNode next = null;//当前结点的后继,就是下一个要遍历的结点
        while(cur!=null){//如果当前结点为null,说明反转完毕
            next = cur.next;//先保存下一个结点
            cur.next = pre;//让当前结点的后继指向前一个结点
            pre = cur;//让pre后移,作为next的前驱
            cur = next;//让cur指向next,此时cur和pre的关系再次成立
        }
        return pre;
    }
}

刷题一定要坚持,总结套路,不单单要把题做出来,要举一反三,也要参考别人的思路,学习别人解题的优点,找出你觉得可以优化的点。

  1. 单链表解题思路:双指针、快慢指针、反转链表、预先指针
  1. 双指针:对于单链表而言,可以方便的让我们遍历结点,并做一些额外的事
  2. 快慢指针:常用于找链表中点,找循环链表的循环点,一般快指针每次移动两个结点,慢指针每次移动一个结点。
  3. 反转链表:通常有些题,将链表反转后会更好做,一般选用三指针迭代法,递归的空间复杂度有点高
  4. 预先指针:常用于找结点,比如找倒数第3个结点,那么定义两个指针,第一个指针先移动3个结点,然后两个指针一起遍历,当第一个指针遍历完成,第二个指针指向的结点就是要找的结点
  1. 数组解题思路:双指针、三指针,下标标记
  1. 双指针:多用于减少时间复杂度,快速遍历数组
  2. 三指针:多用于二分查找,分为中间指针,左和右指针
  3. 下标标记:常用于在数组范围内找东西,而不想使用额外的空间的情况,比如找数组长度为n,元素取值范围为[1,n]的数组中没有出现的数字,遍历每个元素,然后将对应下标位置的元素变为负数或者超出[1,n]范围的正数,最后没有发生变化的元素,就是缺少的值。
LeetCode刷题经验分享:数据结构与算法核心 本文旨在为LeetCode刷题者提供系统化的知识框架与实战经验,覆盖数据结构(数组、链表、树、图等)和算法(排序、搜索、动态规划、贪心等)的核心内容。通过深度解析典型题目,阐述如何将理论知识转化为解题策略,重点提升代码实现能力与算法优化思维。本文采用“概念解析→算法原理→实战应用→工具资源”的逻辑结构,通过理论结合代码的方式,逐步拆解LeetCode高频题型的解题思路。核心章节包括数据结构底层原理、算法复杂度分析、典型题目代码实现、实战项目案例等,帮助读者建立从问题建模到代码优化的完整思维链路。数据结构。 阅读详情

相关推荐

【数据结构-链表-01】反转链表

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨。

优快云站内信: https://i.youkuaiyun.com/#/msg/chat/qyj19920704 2万+

java数据结构与算法刷题-----LeetCode21:合并两个有序链表

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846 思路分析 现在有两个链表,我们要将其合并为一个 最好不要改变原有链表,也就是最终合并结果,使用新的链表来保存 可以采用双指针的思路,而链表本身就是一个指针(指向自己并且保存自己的下一个元素) 所以,我们对比两个指针的值,小的就插入到新链表中...

殷志鹏的博客 1234

让数学变得更生动manim库的使用(1)-基本概念

0、概述 数学理论与数学公式的展示总是一件很枯燥的事情,但3b1b的manim动画库在github上开源之后,让这一切变得非常简单。目前这个库已经分成两个版本一个由3b1b自身维护。但作者并没有承诺长期维护该库,所以由专门团队再次基础上研发了相应的社区版,并对该版本进行长期维护。本文的所有案例都基于社区版的官方案例。本文主要介绍该库的基本概念相关的案例,文章主要以代码为主,关键代码都有相关注释。 另外本文的运行环境维jupyter这与其他的ide环境运行代码稍微有些不同 1、类库引入已经相关测试 引

amao1998的博客 9966

删除重复的电子邮箱

1、问题描述 编写一个 SQL 查询,来删除 Person 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。 2、 创建表格 代码 create table if not exists Person(Id varchar(8), Email varchar(255)); delete * from Person where 1=1; // truncate table Person; insert into Person (Id, Email) values( '1', 'john@ex

qq_45793102的博客 236

Minecraft Forge模组开发入门:从环境搭建到事件监听实战

事件驱动编程是一种基于事件和事件监听器的软件架构模式,其核心原理是通过事件总线实现组件间的松耦合通信。在游戏开发领域,这种模式能够有效处理玩家交互、状态变更等异步操作,具有高度的灵活性和可扩展性。Java作为面向对象编程语言,通过注解和反射机制为事件驱动提供了天然支持。Minecraft模组开发正是事件驱动编程的典型应用场景,开发者可以利用Forge框架提供的事件总线监听游戏内各种行为。本文以Minecraft Forge模组开发为例,详细讲解如何通过Gradle构建工具搭建开发环境,并实现自定义方块注册和

culi3182的博客 396

Workbuddy+DeepSeek V4傻瓜流配置全指南:API接入、模型切换与Agent实战

AI编程助手的核心价值不在于模型本身,而在于如何稳定、安全、低门槛地调用其能力。Agent作为智能体范式,依赖可靠的运行时环境与标准化API通信;DeepSeek V4系列凭借高吞吐、低延迟和强工具调用支持,成为当前生产级Agent的理想引擎。Workbuddy则通过本地配置管理、环境变量注入与UTF-8无BOM容错等工程设计,将复杂部署简化为可复现、可版本化、可团队协同的实践流程。本文聚焦API接入路径下的真实卡点——从Key获取验证、models.json字段语义到沙箱权限控制,覆盖开发者在Window

weixin_33702545的博客 2391

Java求回文数的两种巧妙方法---LeetCode9 回文数

Java求回文数两种巧妙方法详解

Forever_xxx的博客 1454

从稳压管到LDO芯片:一张图看懂线性电源的‘内卷’进化史

本文追溯了从稳压管到LDO芯片的线性电源技术进化历程,详细解析了各阶段的技术突破与局限。重点探讨了现代LDO在超低功耗、高精度控制等方面的创新,并提供了实战选型的黄金法则,帮助工程师在电子设备小型化与低功耗化趋势中做出最优选择。

weixin_42525551的博客 207

牛客Top200---最长回文字符串(java)

题目 题解:中心扩展法 描述:遍历,从左到右遍历,然后向两端扩展 假设每个字符都是回文串最中心的字符,从中心字符向两边扩展,若左右字符不同则他就不会是回文串。 回文字符串需要分情况考虑,分奇偶两种情况,为奇数是i==i,然后向两边扩展,当为偶数时,先判断 i ==i+1 字符是否一样,一样则向两边扩展,否则他就不可能是回文串。 最后回文长度就是right - left -1,这个可以举两个例子 import java.util.*; public class Solution { publi

小样yx的博客 1961

用户和实体行为分析(UEBA)基础指南及解决方案

用户和实体行为分析(UEBA)或异常检测是一种网络安全技术,它使用机器学习(ML)算法来检测网络中用户、主机和其他实体的异常活动。

ITmoster的博客 2893

OpenEuler22.04 快速部署Docker:华为云镜像源配置指南

本文详细介绍了在OpenEuler 22.04系统上快速部署Docker的完整流程。针对系统默认源版本老旧的问题,重点讲解了如何配置华为云镜像源以加速安装,并涵盖Docker引擎、Docker Compose的安装、服务启动验证、权限配置、镜像加速等核心步骤与常见问题排查,帮助用户高效搭建稳定的容器化开发环境。

http9protocoller的博客 174

java实现回文数算法

注意:上述代码假设输入的num是非负整数。如果输入的num是负数,则需要先将其转化为非负整数再进行比较。也可以将负数直接判断为非回文数。

小筱在线博客 608

如何在 UniApp 中接入讯飞语音听写功能 文末附vue3+vue2完整代码

在开发过程中,我遇到了讯飞接口返回空数据的问题。通过仔细检查传送的每一帧数据,我发现问题出在第一帧的配置信息以及 Base64 数据的切片。确保每一帧的数据正确且符合接口要求,问题就能够得到解决。希望这个过程能帮助你在项目中顺利对接讯飞语音识别。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1000

【leetcode刷题】18.反转链表——Java版

一道经典题

公号:一条coding 1万+

Plant Simulation与ABB机器人虚实结合

Plant Simulation与ABB机器人虚实结合

santayana的专栏 1869

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

LeetCode Java面试刷题笔记汇总

LeetCode Java刷题笔记汇总,按照类型刷题效率更高。

终生学习践行者 2948

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Java实现 LeetCode 206 反转链表

206. 反转链表 反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你可以迭代或递归地反转链表。你能否用两种方法解决这道题? /** * Definition for singly-linked list. * public class ListNode...

南 墙 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

力扣刷题路线

结合高频题、经典题和算法思想学习建议,分阶段从基础到进阶编排,覆盖所有核心标签,并标注题号与学习方法。:画图模拟快慢指针移动,如移动零时快指针探路、慢指针标记非零位置。:括号生成时,左括号数不能超过n,右括号数不能超过左括号数。:LCA问题中,若左右子树均含目标节点,则当前节点为祖先。:终止条件、递归调用、返回值,如二叉树深度递归返回。:掌握虚拟头节点、递归反转、环形检测。:掌握索引操作、快慢指针、滑动窗口。:熟悉括号匹配、单调栈、层序遍历。:熟悉反转、哈希统计、回文处理。

FAQEW的博客 1819

【力扣】_206反转链表

package Leetcode真题分门别类.链表; /** * @Author bennyrhys * @Date 2020-05-29 11:42 * * 思路: * 链表翻转,直接改变指针指向 * 保存状态需要创建三个指针(pre前 cur当前 next下一个) * * 复杂度: * 时间O(N) * 空间O(1) * * 注意while处正好判断cur是否为空的情况,返回头节点为末尾null的前一个节点cur * */ import 玩转数据结构.链表看递归.移除链

瑞新の博客:bennyrhys 1665

Leetcode 206 反转链表 Java

Leetcode 206 反转链表 这道题比较基础,记一下分别使用递归和迭代的方法。 //迭代 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ ...

qxdPx的博客 331

LeetCode 206. 反转链表 java

LeetCode 206. 反转链表 java 反转一个单链表。 示例 : 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL JAVA 代码: class Solution { public ListNode reverseList(ListNode head) { ...

lele的专栏 797

【LeetCode】206. 反转链表

两种方法都能有效解决反转链表问题,实际应用中迭代法更为常用,因为它的空间效率更高。链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?这里我们主要实现迭代法,它更加直观且空间效率更高。,请你反转链表,并返回反转后的链表。

m0_73784704的博客 609

【LeetCode 热题 100】206. 反转链表——(解法二)指针翻转

【LeetCode 热题 100】206. 反转链表——(解法一)值翻转这段代码旨在解决 “反转单链表” 的问题。与上一个通过修改节点值的方法不同,此版本采用的是迭代法,通过改变节点的 指针指向来实现真正的链表结构反转。这是解决此问题的标准、高效且最被认可的方法。算法的核心思想是:在遍历链表的过程中,逐个地将每个节点的 指针“反向”,指向其前一个节点。指针的定义与初始化:迭代与指针反转:返回结果:这个过程就像是将链表的节点逐个从旧链表上“摘下”,然后“头插”到新链表的前面,最终完成整个链表的反转。 时空

最短的捷径就是绕远路,绕远路才是我的最短捷径。 1023

数据结构与算法——Java实现 7.习题——反转链表

给你单链表的头节点head,请你反转链表,并返回反转后的链表。

m0_73983707的博客 1180

LeetCode206反转链表(Java实现)

LeetCode206:反转链表(Java实现) 题目概述: 反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 题目分析: 题目很简单,我们需要分以下步骤 假如 1->2 反转为 2->1 只需要将 2.next = 1即可了 如果2.next = 1,则原来的2.next = 3,3节点就数据丢失了,所以在反转之前保存3的值 反转完整后,我们下一个要由 2-&

三少说 373

LeetCode Java刷题笔记—92. 反转链表 II

LeetCode Java刷题笔记—92. 反转链表 II

终生学习践行者 1616
上一篇: java数据结构与算法刷题-----LeetCode160:相交链表
下一篇: MySQL 数据存储和优化------MySQL架构原理 ---- (架构---索引---事务---锁---集群---性能---分库分表---实战---运维)持续更新
ydenergy_殷志鹏
博客等级 码龄7年 5887粉丝 543原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ydenergy_殷志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值