力扣链表(反转、有无环)

LCR 024. 反转链表

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

当我们谈论反转单链表时,我们指的是改变链表中元素的链接方向,使得链表的最后一个节点成为头节点,原本的头节点成为最后一个节点,其余节点也相应地反向链接。

基础概念

  1. 链表(Linked List):链表是一种常见的数据结构,由一系列节点组成,每个节点包含数据部分和指向下一个节点的指针(在单链表中)。与数组不同,链表中的元素并不需要在内存中连续存储。

  2. 头节点(Head Node):链表中的第一个节点,是链表访问的起点。

  3. 反转链表:就是将链表中的节点链接方向逆转,即每个节点的指针指向前一个节点。

思路

反转单链表的基本思路是遍历链表,将每个节点的指针指向它的前一个节点。为此,我们需要记录三个指针:prevcurrnext

  • prev:指向当前节点curr的前一个节点。
  • curr:当前遍历到的节点。
  • next:当前节点curr的下一个节点。

在遍历过程中,我们逐步将curr的指针指向prev,实现反转。但在此之前,我们需要使用next暂时保存curr的下一个节点,以防止链表断开。

算法步骤

  1. 初始化两个指针prevcurrprev初始化为Nonecurr初始化为头节点head

  2. 遍历链表直到curr为空。在每一步中:

    • 保存curr的下一个节点到next(因为在链接反转后,我们会失去访问它的方式)。
    • curr的指针指向prev,实现反转。
    • 移动prevcurr指针前进一位。
  3. 在链表遍历完成后,prev将会成为新的头节点(因为curr会在遍历到链表末尾时变为None)。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def reverseList(self, head: ListNode) -> ListNode:# 思路:遍历链表,将每个节点的指针指向前一个节点# 1.在链表最后面设置一个空节点,作为pre的起点。# 2.将链表第一个节点(头节点)作为当前节点cur,当cur非空,则循环进行以下操作# 3.创建一个临时变量存储下一个节点cur.next# 4.开始将当前节点的指针指向前一个节点pre# 5.移动pre到当前节点,移动cur到下一个节点,继续这样的操作# 初始化空节点和当前节点pre, cur = None, head# 循环遍历while cur:temp = cur.next # 存储下一个节点,因为要改变指针指向了cur.next =  pre# 当前指针转向pre = cur # 移动前一个节点到当前节点cur = temp # 移动当前节点到原来的下一个节点return pre

141. 环形链表

链表讲的很好的题解:
https://leetcode.cn/problems/linked-list-cycle/solutions/175734/yi-wen-gao-ding-chang-jian-de-lian-biao-wen-ti-h-2

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = Noneclass Solution:def hasCycle(self, head: Optional[ListNode]) -> bool:# 初始化快慢指针,快的一次走两步,慢的一次走一步slow, fast = head, head# 循环,条件是快指针和下一个节点都存在while fast and fast.next:# 快慢指针移动slow = slow.nextfast = fast.next.next# 如果相遇,说明有环if slow == fast:return Truereturn False

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

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

相关文章

vue脚手架创建项目:账号登录(利用element-ui快速开发)(取消eslint强制格式)(修改端口号)

新手看不懂,老手不用看系列 文章目录 一、准备工作1.1 取消强制格式检查1.2 导入依赖,注册依赖 二、去element-ui官网找样式写Login组件2.1 引用局部组件2.2 运行项目 三、看一下发现没问题,开始修改前端的代码四、修改端口号4.1 修改后端端口…

Michael.W基于Foundry精读Openzeppelin第52期——ERC4626.sol

Michael.W基于Foundry精读Openzeppelin第52期——ERC4626.sol 0. 版本0.1 ERC4626.sol 1. 目标合约2. 代码精读2.1 constructor()2.2 maxDeposit(address) && previewDeposit(uint256 assets) && deposit(uint256 assets, address receiver)2.3 maxMint(addres…

君正X2100 RTOS JPEG硬件编码

一、配置 进入SDK的tools/iconfigtool/IConfigToolApp目录,执行./IConfigTool指令,进入配置界面: Config.in 是生成配置界面的文件,Config是需要修改的配置文件,选择之后点击Open。 选择 xburst2系列CPU->X2000系列…

Harmony OS 网络编程 实验指南

netcat简介 netcat 是什么? netcat是一个非常强大的网络实用工具,可以用它来调试TCP/UDP应用程序; netcat 如何安装? Linux上可以使用发行版的包管理器安装,例如Debian/Ubuntu上: sudo apt-get instal…

别想宰我,怎么查看云厂商是否超卖?详解 cpu steal time

据说有些云厂商会超卖,宿主有 96 个核心,结果卖出去 100 多个 vCPU,如果这些虚机负载都不高,大家相安无事,如果这些虚机同时运行一些高负载的任务,相互之间就会抢占 CPU,对应用程序有较大影响&a…

【linux】解决python安装成功,命令行无法调用问题

查看已安装的软件包 sudo dpkg --get-selections 查看软件包安装位置 which python3 输出信息:/usr/bin/python3 再创建一个指向 Python 3 的符号链接 sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 1 创建一个 /usr/bin/python 的…

深度学习技巧应用39-深度学习模型训练过程中数据均衡策略SMOTE的详细介绍,以及SMOTE的算法原理与实现

大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用39-深度学习模型训练过程中数据均衡策略SMOTE的详细介绍,以及SMOTE的算法原理与实现,本文介绍了一种用于处理分类数据不平衡问题的过采样方法——SMOTE算法。SMOTE算法通过在少数类的样本之间插值来创建新的样本,从而…

【笔记】Hbase基础笔记

启动hbase:进入hbase安装目录 输入bin/start-hbase.sh 打开shell命令行模式:进入hbase安装目录 输入bin/hbase shell 退出shell命令行模式:exit 停止hbase:进入hbase安装目录 输入bin/stop-hbase.sh 启动关闭Hadoop和HBase的顺序一…

缺省和重载。引用——初识c++

. 个人主页&#xff1a;晓风飞 专栏&#xff1a;数据结构|Linux|C语言 路漫漫其修远兮&#xff0c;吾将上下而求索 文章目录 C输入&输出cout 和cin<<>> 缺省参数全缺省半缺省应用场景声明和定义分离的情况 函数重载1.参数的类型不同2.参数的个数不同3.参数的顺…

生成可读取配置文件的独立运行jar程序

前言: 周五刚躺下,前线打来语音要个下载文件的小程序,下载路径和下载码需要根据配置获取,程序需要在服务器执行。当然配置的设计是个人设计的,不然每次更新下载码都要重新出具jar包,太麻烦。多年没写独立运行的jar包了,翻阅了相关资料,最终还是功夫不负有心人。想着这种…

Redis锁,乐观锁与悲观锁

锁 悲观锁 认为什么时候都会出问题&#xff0c;无论做什么都会加锁 乐观锁 很乐观&#xff0c;认为什么时候都不会出问题&#xff0c;所以不会上锁。 更新数据时去判断一下&#xff0c;在此期间&#xff0c;是否有人修改过这个数据 应用于&#xff1a;秒杀场景 **watch*…

小折叠手机如何经久耐用?收下这份日常养护指南

不同于普通手机的玻璃屏幕&#xff0c;折叠机出于折叠的特性&#xff0c;使用了柔性屏幕。因此撕除原厂保护膜时&#xff0c;由于贴膜较强的粘合力&#xff0c;很容易就会导致屏幕产生不可修复的损伤。 这也是为什么各大手机厂商都不允许折叠机私自贴膜的原因&#xff0c;并且…

GAMIT/GLOBK v10.75:北斗数据处理的新纪元

随着GNSS导航定位技术在不同领域的广泛应用和技术更新的飞速发展&#xff0c;在大型工程项目的设计、施工、运行和管理各个阶段对工程测量提出了更高的要求&#xff0c;许多测绘、勘测、规划、市政、交通、铁道、水利水电、建筑、矿山、道桥、国土资源、气象、地震等行业部门在…

从产品组装和维护/维修的角度来看,基于增强现实的指导:关于挑战和机遇的最新综述

作者&#xff1a; 1. M. Eswaran 2. Anil Kumar Gulivindala 3. M.V.A.Raju Bahubalendruni 关于本文 •分析了增强现实在装配和维护/维修中的作用。 •讨论了AR辅助制造系统的软件和硬件元素。 •讨论了AR跟踪和配准技术面临的挑战。 •讨论了AR辅助制造系统的未来…

视频素材app有哪些?视频素材网址推荐

在这个视觉传达愈发重要的时代&#xff0c;拥有一款好的无水印短视频素材网站就如同握有一把打开创意之门的钥匙&#xff0c;选择合适的短视频素材平台至关重要&#xff0c;这会让你的视频制作更加轻松而高效。 1&#xff0c;蛙学府 以其广泛的优质视频素材库而闻名&#xff0…

Flink SQL填坑记3:两个kafka数据关联查询

在一个项目中,实时生成的统计数据需要关联另外一张表(并非维表),需要统计的数据表是Kafka数据,而需要关联的表,由于不是维度,不能按照主键查询,所以如果放在MySQL上,将存在严重的性能问题,这个时候我想到用将两张表的数据都生成为Kafka数据,然后进行Join操作。中途发…

2024年3月27日暴富榜

子丑寅卯辰巳午未申酉戌亥 每天一读&#xff0c;《小飞生肖》运势&#xff0c; 让您的生活更美好&#xff01; 鼠&#xff1a;生肖暴富榜《中暴富》 鼠&#xff1a;红榜衣服颜色&#xff08;红色&#xff09; 牛&#xff1a;生肖暴富榜《中暴富》 牛&#xff1a;红榜衣服颜色…

Maven发布开源框架到远程仓库

1.背景 当你写了一个自我感觉良好的开源工具希望给他人分享&#xff0c;如果只是在github等网站进行公布之外&#xff0c;用户使用起来还不是很方便&#xff0c;特别是当你提供是特定领域的基础工具。你还可以把它部署到中央仓库&#xff0c;这样别人使用就会方便很多。接下来…

后端常见面经之MySQL

MySQL字段类型 数值类型 整型经常被用到&#xff0c;比如 tinyint、int、bigint 。默认是有符号的&#xff0c;若只需存储无符号值&#xff0c;可增加 unsigned 属性。 int(M)中的 M 代表最大显示宽度&#xff0c;并不是说 int(1) 就不能存储数值10了&#xff0c;不管设定了显…

【@changesets/cli】变更集实战教程

一、背景概述 前端目前基于Monorepo架构的npm包开发很普遍&#xff0c;在开发完毕后&#xff0c;我们需要对包进行版本号升级&#xff0c;并且部署&#xff0c;这些操作如果是手动来操作的话&#xff0c;很麻烦&#xff0c;而且容易出错。 例如有这样的场景&#xff1a; -ap…