leetcode系列:反转链表的形象表示

反转链表是一道比较简单的题,主要考察的是对链表数据结构的理解和双指针应用,比较容易出错的地方是指针的移动顺序。在练习的过程中想到了一个比较形象的表示方法,于是记录下来。

# 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: Optional[ListNode]) -> Optional[ListNode]:
        pre = None
        cur = head 
        while cur:
            tmp = cur.next 
            cur.next = pre
            pre = cur
            cur = tmp
        return pre

1. 首先pre的定义是建立在对链表的理解上的,最终链表的head因为没有next节点,所以就是None。这个pre既是在后面表示前一个节点,又是在初始化时表示了反转后链表的尾部,这样就能理解为什么要定义pre。

2. cur表示当前节点,之后的while循环也是建立在cur上的,当cur为none了,表示这个链表遍历到尾部了。

3. tmp = cur.next和cur.next = pre这两句可以按照下面的图片理解:

        本来A->cur->C是一个链表,如第一行;

        tmp = cur.next其实相当于把cur->C的链接砍断,把C先存到别的地方去,如第二行;

        cur.next = pre相当于把A->cur的链接砍断后添加了一个反向的链接,如第三行和第四行;

        这两个操作后实现了cur->A,那么接下来的步骤就是该把C->cur了。

4. pre = cur和cur = tmp就是在把指针向后移,重复上面3的步骤,把C->cur。注意:在这个操作后pre就指向了cur,cur已经指向tmp,所以最后return的是pre而不是cur。

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

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

相关文章

高效便捷的淘宝商品详情关键词搜索API接口

联讯数据可以介绍一些高效便捷的淘宝商品详情关键词搜索API接口。 以下是一些可以考虑使用的API接口: 阿里云搜索引擎API:阿里云搜索引擎API是一个基于云计算技术的搜索引擎,提供商品详情关键词搜索功能。它支持中文搜索,并且具…

听GPT 讲Rust源代码--src/tools(12)

File: rust/src/tools/rust-analyzer/crates/rust-analyzer/src/config.rs 在Rust源代码中,rust/src/tools/rust-analyzer/crates/rust-analyzer/src/config.rs文件的作用是定义和解析rust-analyzer的配置文件。该文件包含了各种配置项的数据结构和枚举类型&#xf…

Mysql、Oracle安全项检查表及操作脚本

软件开发全资料获取:点我获取 Mysql检查表 Oracle检查表

基于微群机器人的二次开发

请求URL: http://域名地址/modifyGroupName 请求方式: POST 请求头Headers: Content-Type:application/jsonAuthorization:login接口返回 参数: 参数名必选类型说明wId是String登录实例标识chatRoom…

vue3自定义路由栈pinia+vue-router来实现

我们知道vue-router使用push跳转可以通过浏览器的返回箭头,就能回到上一页,是因为它有路由栈,每次跳转都会存放(记录)当前路由的相关信息。 根据这个思路我们利用piniavue-router 来自定义路由栈。 说下项目中 自定义…

前端知识(九)------------JavaScript底层知识

1.事件循环机制 在实际的编码过程中小伙伴们不知道有没有遇到过这样的问题,我们都知道js是单线程的。而且是一门解释型语言。那么正常来讲执行代码的顺序就是自上而下一句一句执行对吧 但是有的时候我们发现返回的结果并不是自上而下执行的。我们先写了一段代码 …

国产化软件突围!怿星科技eStation产品荣获2023铃轩奖“前瞻优秀奖”

11月11日,2023中国汽车供应链峰会暨第八届铃轩奖颁奖典礼在江苏省昆山市举行。怿星科技凭借eStation产品,荣获2023铃轩奖“前瞻智能座舱类优秀奖”,怿星CEO潘凯受邀出席铃轩奖晚会并代表领奖。 2023铃轩奖“前瞻智能座舱类优秀奖” 铃轩奖&a…

Unity使用打成图集的Sprite作为模型贴图使用的问题

大家好,我是阿赵。   有时候用Unity引擎做项目的时候,会遇到这样的需求,美术做了一些模型或者特效,然后策划想在游戏运行的时候,读取一些游戏图标放在特效或者模型上面当做贴图使用。   这个需求实现起来很简单&am…

SAP UI5 walkthrough step6 Modules

在SAPUI5 中,资源通常用作Modules,这个我们将用Message Toast 来实现告警功能 修改controller.js webapp/controller/App.controller.js sap.ui.define(["sap/ui/core/mvc/Controller","sap/m/MessageToast" ], (Controller, Mes…

Qt优秀开源项目之十九:跨平台记事本Notes

官网:https://www.get-notes.com github:https://github.com/nuttyartist/notes 一.特性 1.完全基于Qt和C 2.完全开源和跨平台(Linux、macOS、Windows) 3.运行速度快,界面美如画 4.支持Markdown 5.支持使用嵌套文件夹…

几种排序的实现

直接插入排序 直接插入排序是一种简单的插入排序法,其基本思想是: 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。 实际中我们玩扑克牌时&#xff…

51单片机独立按键以及矩阵按键的使用以及其原理--独立按键 K1 控制 D1 指示灯亮灭以及数码管显示矩阵按键 S1-S16 按下后键值 0-F

IO 的使用–按键 本文主要涉及8051单片机按键的使用,包括独立按键以及矩阵按键的使用以及其原理,其中代码实例包括: 1.独立按键 K1 控制 D1 指示灯亮灭 2.通过数码管显示矩阵按键 S1-S16 按下后键值 0-F 文章目录 IO 的使用--按键一、按键消抖二、独立按…

Vue项目中实现浏览器标签页名字的动态修改

修改router/index.js文件 路由条目下面添加meta属性 meta:{title:DevOps运维平台 }示例 使用Vue的全局守卫函数beforeEach,在路由切换前动态修改浏览器标签页名字 router.beforeEach((to,from,next) > {document.title to.meta.titlenext() })

高项备考葵花宝典-项目进度管理输入、输出、工具和技术(上,很详细考试必过)

项目进度管理的目标是使项目按时完成。有效的进度管理是项目管理成功的关键之一,进度问题在项目生命周期内引起的冲突最多。 小型项目中,定义活动、排列活动顺序、估算活动持续时间及制定进度模型形成进度计划等过程的联系非常密切,可以视为一…

MX6ULL学习笔记 (八) platform 设备驱动实验

前言: 什么是 Linux 下的 platform 设备驱动 Linux下的字符设备驱动一般都比较简单,只是对IO进行简单的读写操作。但是I2C、SPI、LCD、USB等外设的驱动就比较复杂了,需要考虑到驱动的可重用性,以避免内核中存在大量重复代码&…

玩转大数据13: 数据伦理与合规性探讨

1. 引言 随着科技的飞速发展,数据已经成为了现代社会的宝贵资产。然而,数据的收集、处理和利用也带来了一系列的伦理和合规性问题。数据伦理和合规性不仅关乎个人隐私和权益的保护,还涉及到企业的商业利益和社会责任。因此,数据…

Go语言深度优先搜索(DFS)

Go 语言代码段实现了深度优先搜索(DFS)算法,该算法用于遍历图数据结构。以下是代码的主要要点和执行流程的总结: 深度优先搜索函数 (DFS): 接收图的邻接表 (map[int][]int)、访问记录 (map[int]bool) 和当前节点作为参数。将当前…

SpringBoot项目静态资源默认访问目录

SpringBoot项目:静态资源默认访问目录 参考博客:https://blog.csdn.net/weixin_43808717/article/details/118281904

创建Vue2项目,引入chart.js,并生成柱形图、折线图、饼图

基础创建 1. 创建一个新的 Vue 2 项目 如果你还没有创建项目,可以使用 Vue CLI 来创建一个新项目。首先确保你已经安装了 Node.js 和 npm。然后安装 Vue CLI 并创建一个新项目。 npm install -g vue/cli vue create my-vue-chart-project在创建过程中选择 Vue 2 …

End-to-End Reconstruction-Classification Learning for Face Forgery Detection

一、研究背景 现有模型主要通过提取特定的伪造模式进行深度伪造检测,导致学习到的表征与训练集中已知的伪造类型高度相关,因此模型难以泛化到未知的伪造类型上使用。 二、研究动机 1.真实样本的特征分布相对更为紧凑,因此学习真实人脸之间的…