数据结构学习(三)链表

news2024/12/26 23:33:06

链表

1. 概念

  1. 反转链表
    给出3个指针,一个cur,用于遍历链表中的每个节点,一个prev,用于保存cur指向的节点的上一个节点地址,还有一个after,用于保存cur指向的节点的下一个节点地址,链表操作遵循先连后断,
    在这里插入图片描述

  2. 给定一个头结点为 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。
    用快慢指针的方法解决,一个快指针fast,一个慢指针slow,开始时,都让他们指向链表的头节点,然后fast每次向后遍历两个节点,而slow每次往后遍历一个节点,循环这两步操作,循环结束条件是:当单链表有偶数个节点时,fast先遇到空指针NULLL;当单链表有奇数个节点时,fast->next先遇到空指针NULL。
    在这里插入图片描述

  3. 输入一个链表,输出该链表中倒数第k个结点。
    (1).先定义两个节点指针,一个front,一个back,开始时都让他们指向链表的头节点;(2).先让front走k步(有可能front还没走完k步就已经到达链表的末尾,说明倒数第k个节点肯定没有,就没必要再执行下一步,直接返回NULL) ;(3).front和back同时往后走,当front到达链表末尾时,back恰好在倒数第k个节点的位置。

  4. 将两个升序链表合并为一个新的 升序 链表并返回。
    (1).定义一个带头结点空链表,再定义一个尾指针tail用来指向新链表的尾节点,便于后续尾插;另外再定义两个指针,一个cur1,用于遍历链表list1,一个cur2,用于遍历链表list2;(2).当cur1和cur2每遍历一个节点时,比较两个节点的值,让值小的那个节点尾插到新链表,并让指针往后走一步,另一个指针不动,循环操作,直到其中一个链表被遍历完;(3).循环结束后,看哪一个链表不为空,就把尾指针tail指向不为空的那一部分;(4).返回新链表头节点的指针域的值。

  5. 判断单链表是不是回文结构
    (1).用快慢指针的思想找到原链表的中间节点;(2).反转后半段链表;(3).判断前半段与后半段是否相等;(4).再将后半段逆置,恢复原链表。

  6. 两个链表(不带环)相交
    检测两个链表(不带环)是否相交:(1).找到两个链表的最后一个节点;(2).检测两个链表的最后一个节点是否相同。
    求两个相交链表(不带环)的节点:(1).分别求出两个链表的节点个数;(2).定义两个指针,分别指向两个链表的头节点;(3).让指向较长链表的指针先遍历两链表节点个数差值个节点;(4).让两个指针同时往后遍历,并检测节点是否相同,若相同,则该节点就是交点。

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/34e107e6228a4de190e324b54c5119ba.png#pic_center

  1. 给定一个链表,判断链表中是否有环。
    思路:快慢指针,即慢指针一次走一步,快指针一次走两步,两个指针从链表其实位置开始运行,如果链表带环则一定会在环中相遇,否则快指针率先走到链表的末尾。
    在这里插入图片描述

1.为什么快指针每次走两步,慢指针走一步可以?
假设链表带环,两个指针最后都会进入环,快指针先进环,慢指针后进环。当慢指针刚进环时,可
能就和快指针相遇了,最差情况下两个指针之间的距离刚好就是环的长度。此时,两个指针每移动
一次,之间的距离就缩小一步,不会出现每次刚好是套圈的情况,因此:在满指针走到一圈之前,
快指针肯定是可以追上慢指针的,即相遇。

2.快指针一次走3步,走4步,…n步行吗?
假设:快指针每次走3步,满指针每次走一步,此时快指针肯定先进环,慢指针后来才进环。假设慢指针进环时候,快指针的位置如图所示:
此时按照上述方法来绕环移动,每次快指针走3步,慢指针走1步,是永远不会相遇的,快指针刚好将慢指针套圈了,因此不行。
只有快指针走2步,慢指针走一步才可以,因为换的最小长度是1,即使套圈了两个也在相同的位置。

2. 解题技巧(我的总结)

1> 链表递归修改、查询

题目说明实现
430. 扁平化多级双向链表设func(l)可以扁平化子链表l,递归修改我的提交
2058. 找出临界点之间的最小和最大距离保存某个节点往后的极点中的最大和最小位置,递归查找计算我的提交
2074. 反转偶数长度组的节点每次跳到一个组的末尾,看是否要反转下一个组,递归我的提交
2095. 删除链表的中间节点参数中记录前面多少节点,返回值记录后面多少节点我的提交
2816. 翻倍以链表形式表示的数字dfs修改下一结点,返回是否进位,最后不能漏掉可能新增头结点的情况我的提交

3. 更多练习

4. 参考

  1. 基础算法-链表
  2. 总库:tryHard

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

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

相关文章

linux 交叉编译curl(+openssl)

一、交叉编译openssl 参考博客:点击跳转 二、交叉编译curl 1、源码下载 地址:点击跳转 2、配置 CPPFLAGS"-I/home/gui/gui/openssl/build_arm/include" LDFLAGS"-L/home/gui/gui/openssl/build_arm/lib" LIBS"-ldl" \ …

webpack基础配置及使用

webpack是什么 是一个现代 JavaScript 应用程序的静态模块打包器。当webpack 处理应用程序时,它会递归地构建一个依赖关系图 ,其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle 。主要有 五个核心概念&#xff1a…

数据服务安全的重要性

数据服务安全在当今信息化社会显得尤为重要。随着大数据、云计算、人工智能等技术的飞速发展,数据已经成为企业和组织的核心资产,数据服务安全也面临着前所未有的挑战。本文将从数据服务安全的重要性、常见威胁、防护策略以及未来发展趋势等方面进行探讨…

【学位论文】上海交通大学 研究生学位论文 本地保存

上海交大研究生学位论文网:http://thesis.lib.sjtu.edu.cn/ (只能校内访问或SJTU VPN访问) 如果希望下载论文,需要参考:https://github.com/olixu/SJTU_Thesis_Crawler 安装过程 安装过程的几个坑: &a…

day04-Maven-SpringBootWeb入门

文章目录 01. Maven1.1 课程安排1.2 什么是Maven1.3 Maven的作用1.4 Maven模型1.5 Maven仓库1.6 Maven安装1.6.1 下载1.6.2 安装步骤 2 IDEA集成Maven2.1 配置Maven环境2.1.1 当前工程设置2.1.2 全局设置 2.2 创建Maven项目2.3 POM配置详解2.4 Maven坐标详解2.5 导入Maven项目 …

带使能控制的锂电池充放电解决方案

一、产品概述 TP4594R 是一款集成线性充电管理、同步升压转换、电池电量指示和多种保护功能的单芯片电源管理 SOC,为锂电池的充放电提供完整的单芯片电源解决方案。 TP4594R 内部集成了线性充电管理模块、同步升压放电管理模块、电量检测与 LED 指示模块、保护模块…

失败与坚持

失败 很多计划和目标由于个人能力等问题,都失败了。 如果将最近十年规划的目标算一个总评的话,接近97%的目标都没有实现。 这主要原因就是脱离了自身实际制定了一些超出自身能力所及的目标,当然也有一些客观因素。 坚持 有擅长做的事情&am…

Redis集群(主从)

1.主从集群 集群结构: 一.单机安装redis 1.上传压缩包并解压,编译 tar -xzf redis-6.2.4.tar.gz cd redis-6.2.4 make && make install 2.修改redis.config的配置并启动redis # 绑定地址,默认是127.0.0.1,会导致只能在本地访问。…

技术面没过,居然是因为没用过Pytest框架

01 概述 pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点: 简单灵活,容易上手,文档丰富; 支持参数化,可以细粒度地控制要测试的测试用例; 能够支持简单的单元测试和复杂的…

什么是网络安全、信息安全、计算机安全,有何区别?

这三个概念都存在,一般人可能会混为一谈。 究竟它们之间是什么关系?并列?交叉? 可能从广义上来说它们都可以用来表示安全security这样一个笼统的概念。 但如果从狭义上理解,它们应该是有区别的,区别在哪呢&…

HFSS仿真双频微带天线学习笔记

HFSS仿真双频微带天线 文章目录 HFSS仿真双频微带天线1、 求解器设置2、 建模3、 激励方式设置4、 边界条件设置5、 扫频设置6、 设计检查,仿真分析7、 数据后处理 这里重点关注HFSS软件的操作,关于理论知识将在后面的文章中进行更新。 设计要求&#xf…

Golang pprof 分析程序的使用内存和执行时间

一、分析程序执行的内存情况 package mainimport ("os""runtime/pprof" )func main() {// ... 你的程序逻辑 ...// 将 HeapProfile 写入文件f, err : os.Create("heap.prof")if err ! nil {panic(err)}defer f.Close()pprof.WriteHeapProfile(f…

React 模态框的设计(四)状态管理

最近忙的不可开交,每天恨不得把时间掰开使用,挣不到钱还没时间,有时候我在想我怎么混得这个样子。题外话不多说,从这节课开始,我把这个模态框的教程写完整。请看效果: 这个模态框功能相对比较完整&#x…

桂院校园导航 静态项目 二次开发教程 2.0

Gitee代码仓库:桂院校园导航小程序 GitHub代码仓库:GLU-Campus-Guide 静态项目 2.0版本 升级日志 序号 板块 详情 1 首页 重做了首页,界面更加高效和美观 2 校园页 新增了 “校园指南” 功能,可以搜索和浏览校园生活指南…

聊聊国内「类Sora模型」发展现状,和 Sora 的差距到底有多大?

2024 年 2 月 16 日。 就在谷歌发布他新一代的多模态大模型 Gemini 1.5 Pro 的同一天,OpenAI 带着新一代的文生视频模型 Sora 再次抓住了全世界人们的眼球。 “颠覆”、“炸裂”、“变天”、“疯狂”,类似的形容词一夜之间簇拥在 Sora 周围,…

浅谈一个CTF中xss小案例

一、案例代码 二、解释 X-XSS-Protection: 0:关闭XSS防护 之后get传参,替换过滤为空,通过过滤保护输出到img src里面 三、正常去做无法通过 因为这道题出的不严谨所以反引号也是可以绕过的 正常考察我们的点不在这里,正常考察…

LSA头部结构简述

LSA(Link State Advertisement)是一种用于路由协议头部结构,用于在网络中传递路由信息。 LSA头部结构包含以下几个字段: 1、LSA类型(LSA Type):指示LSA的类型,不同类型的LSA用于传递…

怎么压缩成mp4视频?

在数字化时代,视频已经成为我们日常生活中不可或缺的一部分。然而,有时候我们可能会遇到视频文件太大的问题,不便于传输、存储或分享。那么,如何将视频压缩成MP4格式,以减小文件大小呢?本文将为您介绍几种简…

某大型制造企业数字化转型规划方案(附下载)

目录 一、项目背景和目标 二、业务现状 1. 总体应用现状 2. 各模块业务问题 2.1 设计 2.2 仿真 2.3 制造 2.4 服务 2.5 管理 三、业务需求及预期效果 1. 总体业务需求 2. 各模块业务需求 2.1 设计 2.2 仿真 2.3 制造 2.4 服务 2.5 管理 四、…

四年一段旅途,一个起点,一个机会

不得不感慨一下,现在的年轻人、大学生实在是太厉害了 最近加入了一个社群,是一名大三学生创建的,他短短一年间,就创建了一个数千人的社群,还运营的几十个副业社群,一年的时间变现100W,这些成绩…