Java数据结构 (链表反转(LinkedList----Leetcode206))

 

1. 链表的当前结构

  • 每个方框代表一个节点,每个节点包含两个部分:
    • 左侧的数字:节点存储的值,例如 4534 等。
    • 右侧的地址(如 0x90):表示该节点 next 指针指向的下一个节点的内存地址。
  • 例子中,链表从右向左依次连接,形成 45 -> 34 -> 23 -> 12
初始结构
  • 链表的头节点为 12head 指向 12
  • cur:当前节点,指向某个正在操作的节点。

2. 代码逻辑解读

head.next = null; // 第一步
cur.next = head;
head = cur;
cur = curN;

代码功能

  1. head.next = null;

    • 将原链表的 headnext 置为 null,这是反转的关键一步,因为反转后,原来的头节点将变成尾节点。
  2. cur.next = head;

    • 将当前节点 curnext 指向 head
    • 这样,当前节点 cur 插入到新链表的头部。
  3. head = cur;

    • 更新头节点为 cur,当前节点变成了新链表的头部。
  4. cur = curN;

    • cur 更新为下一个节点 curN,继续处理链表的剩余部分。

3. 图示解析

  • 初始状态

  • 完整代码:

    public ListNode reverseList(ListNode head) {
        ListNode cur = head;  // 当前节点
        ListNode curN;        // 下一个节点
        head = null;          // 初始化新链表的头部为空
        
        while (cur != null) {
            curN = cur.next;  // 保存下一个节点的位置
            cur.next = head;  // 当前节点指向新链表的头部
            head = cur;       // 更新新链表的头部
            cur = curN;       // 移动到下一个节点
        }
        return head;
    }
    

    5. 反转链表的特点

  • 时间复杂度O(n),每个节点只处理一次。
  • 空间复杂度O(1),只使用了固定的指针变量 curcurN
  • 应用场景
    • 需要逆序访问链表时(如回文检查)。
    • 数据倒序排列。

反转链表原理(Java实现)_哔哩哔哩_bilibili

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IMX6ull项目环境配置

文件解压缩: .tar.gz 格式解压为 tar -zxvf .tar.bz2 格式解压为 tar -jxvf 2.4版本后的U-boot.bin移植进SD卡后,通过串口启动配置开发板和虚拟机网络。 setenv ipaddr 192.168.2.230 setenv ethaddr 00:04:9f:…

git基础指令大全

版本控制 git管理文件夹 进入要管理的文件夹 — 进入 初始化(提名) git init 管理文件夹 生成版本 .git ---- git在管理文件夹时,版本控制的信息 生成版本 git status 检测当前文件夹下的文件状态 (检测,检测之后就要管理了…

[高等数学学习记录]函数的极值与最大值最小值

1 知识点 1.1 函数的极值及其求法 定义 设函数 f ( x ) f(x) f(x) 在点 x 0 x_0 x0​ 的某邻域 U ˚ ( x 0 ) \mathring{U}(x_0) U˚(x0​) 内有定义&#xff0c;如果对于去心邻域 U ˚ ( x 0 ) \mathring{U}(x_0) U˚(x0​) 内的任一 x x x&#xff0c;有 f ( x ) <…

docker 简要笔记

文章目录 一、前提内容1、docker 环境准备2、docker-compose 环境准备3、流程说明 二、打包 docker 镜像1、基础镜像2、国内镜像源3、基础的dockerfile4、打包镜像 四、构建运行1、docker 部分2、docker-compose 部分2.1、构建docker-compose.yml2.1.1、同目录构建2.1.2、利用镜…

JVM常见知识点

在《深入理解Java虚拟机》一书中&#xff0c;介绍了JVM的相关特性。 1、JVM的内存区域划分 在真实的操作系统中&#xff0c;对于地址空间进行了分区域的设计&#xff0c;由于JVM是仿照真实的机器进行设计的&#xff0c;那么也进行了分区域的设计。核心区域有四个&#xff0c;…

电脑系统bcd文件损坏修复方法:小白也会的修复方法

电脑系统bcd文件损坏怎么办?当电脑开机时出现bcd文件损坏&#xff0c;一般情况是由于电脑系统的引导坏了&#xff0c;需要进行修复。现在越来越多的小伙伴遇到电脑引导丢失或者安装后无法正常引导的问题&#xff0c;我们现在一般是pe下进行修复引导&#xff0c;那么电脑系统bc…

Flutter_学习记录_导航和其他

Flutter 的导航页面跳转&#xff0c;是通过组件Navigator 和 组件MaterialPageRoute来实现的&#xff0c;Navigator提供了很多个方法&#xff0c;但是目前&#xff0c;我只记录我学习过程中接触到的方法&#xff1a; Navigator.push(), 跳转下一个页面Navigator.pop(), 返回上一…

【架构面试】二、消息队列和MySQL和Redis

MQ MQ消息中间件 问题引出与MQ作用 常见面试问题&#xff1a;面试官常针对项目中使用MQ技术的候选人提问&#xff0c;如如何确保消息不丢失&#xff0c;该问题可考察候选人技术能力。MQ应用场景及作用&#xff1a;以京东系统下单扣减京豆为例&#xff0c;MQ用于交易服和京豆服…

Git 如何将旧仓库迁移新仓库中,但不显示旧的提交记录

一、异常错误 场景&#xff1a;我想把旧仓库迁移新仓库中&#xff0c;放进去之后&#xff0c;新仓库会显示这个项目之前的所有提交&#xff0c;如何不显示这些旧的提交&#xff1f; 二、原因 我们需要将旧仓库迁移新仓库中&#xff0c;但是又不想在新仓库中显示旧的提交记录…

02-AD-绘制原理图(画示意图+添加已有P封装)

画示意图添加已有P封装 画原理示意图绘制原理图:电容绘制原理图:晶体绘制发光二极管绘制TVS二极管绘制按键绘制拨码开关绘制双排针绘制单排针绘制TYPE母座画图技巧:按顺序递增,删除不用的先画线,再画框 绘制AMS芯片填充框透明显示:防止遮挡其他部分不需要添加其他内容 绘制STM3…

C++红黑树详解

文章目录 红黑树概念规则为什么最长路径不超过最短路径的二倍&#xff1f;红黑树的时间复杂度红黑树的结构插入叔叔节点情况的讨论只变色(叔叔存在且为红)抽象的情况变色单旋&#xff08;叔叔不存在或叔叔存在且为黑&#xff09;变色双旋&#xff08;叔叔不存在或叔叔存在且为黑…

LLaMA-Factory 微调LLaMA3

LLaMA-Factory 框架 首先需要通过vscode连接远程服务器哦 如果是租赁的AutoDL服务器&#xff0c;一定要将模型下载到数据盘。 git clone https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory pip install -e . 准备训练数据 训练数据&#xff1a; fintech.json …

FFmpeg 头文件完美翻译之 libavcodec 模块

前言 众所周知&#xff0c;FFmpeg 的代码开发上手难度较高&#xff0c;源于官方提供的文档很少有包含代码教程相关的。要想熟练掌握 FFmpeg 的代码库开发&#xff0c;需要借助它的头文件&#xff0c;FFmpeg 把很多代码库教程都写在头文件里面。因此&#xff0c;熟读头文件的内…

IDEA工具下载、配置和Tomcat配置

1. IDEA工具下载、配置 1.1. IDEA工具下载 1.1.1. 下载方式一 官方地址下载 1.1.2. 下载方式二 官方地址下载&#xff1a;https://www.jetbrains.com/idea/ 1.1.3. 注册账户 官网地址&#xff1a;https://account.jetbrains.com/login 1.1.4. JetBrains官方账号注册…

AMQP是什么

文章目录 AMQP是什么一、引言二、AMQP的核心概念1、协议定义2、消息传递模型 三、AMQP的工作原理1、消息路由机制2、消息确认机制 四、使用示例1、Java代码示例1.1、项目依赖1.2、配置文件1.3、消息配置1.4、消息生产者1.5、消息消费者 五、总结 AMQP是什么 一、引言 在现代分…

ESP32基于ESPIDF I2C设备探测和使用

ESP32基于ESPIDF I2C设备探测和使用 &#x1f4cd;I2C接口介绍和参考&#xff1a;https://docs.espressif.com/projects/esp-idf/zh_CN/stable/esp32/api-reference/peripherals/i2c.html &#x1f4d3;I2C 主机探测 主要主要利用 i2c_master_probe() 函数&#xff0c;来检测…

计算机网络 (58)无线局域网WLAN

前言 无线局域网WLAN&#xff08;Wireless Local Area Network&#xff09;是一种利用无线通信技术将计算机设备互联起来&#xff0c;构成可以互相通信和实现资源共享的网络体系。 一、定义与特点 定义&#xff1a; WLAN通过无线信道代替有线传输介质连接两个或多个设备形成一个…

物业管理平台系统提升社区智能化服务效率与管理水平

内容概要 在现代社会中&#xff0c;物业管理平台系统的出现&#xff0c;为社区的智能化服务带来了革命性的变化。这种系统不仅仅是提升了工作效率&#xff0c;更是通过一系列智能化功能&#xff0c;根本性改变了物业管理的方式。比如&#xff0c;在广告位管理方面&#xff0c;…

基于SpringBoot的网上考试系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

【C++】类与对象初级应用篇:打造自定义日期类与日期计算器(2w5k字长文附源码)

文章目录 一、日期类的实现1. 日期类的默认成员函数的分析与实现构造函数其它默认成员函数 2. 各种逻辑比较运算符重载3. 日期加与减天数日期加天数系列日期减天数系列日期加减天数的最后修定和- -系列 4. 日期减日期方法一方法二 5. 流插入与流提取重载流插入重载流提取重载(含…