链表的一些典型问题

求链表的中间节点/倒数第K个节点

等类似的随机访问,可以考虑用快慢指针

 

求链表的中间节点

可以定义两个指针,一个一次走两步一个一次走一步,当走的快的走到NULL时,走的慢的就是链表的中间节点。(此法求出的偶数个节点的链表的中间节点是它中间的第二个)

 

求倒数第K个节点,也可以定义两个指针,然后一个先走K步,走完以后,另一个再走


判断是否为回文链表

 

先用快慢指针求中间节点

逆置中间节点及其后的节点,并用一个指针指向该逆置后的链表

头指针和指向该逆置后的链表的指针一起走并比较是否相等,有一个不相等就不是回文链表

有一个链表走到NULL就停下,并且该链表是回文链表(因为中间节点的前一个结点还指向逆置后的最后一个节点)


 

判断两个链表是否相交,并且求出第一个相交的节点

如果相交这两个链表的尾节点一定相等

如果两个链表的尾节点相等,就求出两个链表的长度

让长的先走这两个链表长度的差值步,然后一起走

走到两个链表的节点的指针域第1次相等的地方,就是第一个相交的节点


判断链表是否带环

(用快慢指针,一个走一次走两步,一个一次走一步)

 

由于快指针与慢指针走的步数差为1(步数差=快指针一次走的步数—慢指针一次走的步数),所以如果链表带环,慢指针最终一定会追上快指针,反之则不会。

 

如果快指针与慢指针走的步数差为1(步数差=快指针一次走的步数—慢指针一次走的步数)则快慢指针一定会再环中相遇

 

因为

则设快指针入和慢指针入环后的差距为N,

如果快指针与慢指针走的步数差为1

那么他们两个指针每走一次,N就减1,当N为0时就相遇了

 

如果快指针与慢指针走的步数差不为1

就要看N是不是他们两个的差值的倍数了,

 

如果不是就要看N减到负数时新的N是不是他们两个都倍数,如果还不是,就肯定追不上了。

 


求带环链表的入环节点

 

结论:快指针从相遇点开始走,慢指从链表的头开始走,他们会在环的入口点相遇

b6038e051e4d46d88fdbe98bc4b39a57.png

 

把快慢指针的相遇点指向NULL,让一个新的指针指向相遇点的下一个节点,让这个新的指针一步一步向后走,再让一个指针原链表的头开始走,这两个链表的交点就是链表入环点


复制复杂链表问题

(复杂链表是多了一个随机指针,这个指针可能指向他自己这个链表的任何一个节点,也可能指向NULL)

 

时间复杂度为O(N)的方法

 

在原链表的每一个节点后面插入malloc一个新节点,这个新节点复制了它前一个节点的数据域。

 

这个新节点的随机指针指向它前一个节点的随机指针指向的节点的next,如下图

924209c765784260a3f203ce6a6a5e47.png

最后把新的malloc出来的节点连接起来,再把原链表恢复 

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

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

相关文章

数据之光:乡镇企业的发展利器——数据可视化

数据可视化是一项强大的工具,它不仅在大型企业中发挥关键作用,而且在乡镇企业中也能作出显著贡献。那么,数据可视化究竟能为乡镇企业做出什么样的贡献呢? 首先,数据可视化为乡镇企业提供了更清晰的业务洞察。通过将庞大…

Vue.js学习笔记(1)——Visual Studio Code搭建Vue.js框架

1 安装Node.js 1、下载安装包:进入官网(https://nodejs.org/en),下载左侧的稳定版。 2、选择安装位置,不用勾选自动安装必要工具。 其他都默认Next。 配置环境,具体参考本文章: https://blo…

大语言模型(LLM)框架及微调 (Fine Tuning)

大语言模型(LLM) 技术作为人工智能领域的一项重要创 新在今年引起了广泛的关注。 LLM 是利用深度学习和大数据训练的人工智能系统,专门 设计来理解、生成和回应自然语言。这些模型通过分析大量 的文本数据来学习语言的结构和用法,…

【网络安全】全网最全的渗透测试介绍(超详细)

渗透测试介绍 渗透测试就是模拟攻击者入侵系统,对系统进行一步步地渗透,发现系统地脆弱环节和隐藏风险。最后形成测试报告提供给系统所有者。系统所有者可根据该测试报告对系统进行加固,提升系统的安全性,防止真正的攻击者入侵。…

【Unity】【FBX】如何将FBX模型导入Unity

【背景】 网上能够找到不少不错的FBX模型资源,大大加速游戏开发时间。如何将这些FBX导入Unity呢? 【步骤】 打开Unity项目文件,进入场景。 点击Projects面板,右键选择Import New Assets 选中FBX文件后导入。Assets文件夹中就会…

【网络安全】upload靶场pass1-10思路

目录 Pass-1 Pass-2 Pass-3 Pass-4 Pass-5 Pass-6 Pass-7 Pass-8 Pass-9 Pass-10 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Filotimo__✍️原创,首发于CSDN&#x1…

求解拍频的信号特征

这张图上,时域已经明显产生调幅波的拍频特征。利用宏观的拍频特征可以肉眼识读两个信号的频差: 一秒是69.42个像素。拍频周期是:21.857像素。所以,拍频的周期是:3.7161Hz. 其中一个频率是50Hz,另一个频率…

C# Winform教程(二):基础窗口程序

1、介绍 winform应用程序是一种智能客户端技术,我们可以使用winform应用程序帮助我们获得信息或者传输信息等。 2、常用属性 Name:在后台要获得前台的控件对象,需要使用Name属性。 Visible:指示一个控件是否可见、 Enable&…

验证 Mixtral-8x7B-Instruct-v0.1 和 LangChain SQLDatabaseToolkit 的集成效果

验证 Mixtral-8x7B-Instruct-v0.1 和 LangChain SQLDatabaseToolkit 的集成效果 0. 背景1. 验证环境说明2. 验证开始2-1. 准备测试数据库2-2. 读取环境配置信息2-3. 导入依赖包2-3. 创建 SQLDatabaseToolkit 对象和 AgentExecutor 对象2-4. 第1个测试 - 描述一个表2-5. 第2个测…

算法训练第五十三天|1143. 最长公共子序列、1035. 不相交的线、53. 最大子数组和

1143. 最长公共子序列: 题目链接 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对…

手机怎么下载python并安装,如何在手机上下载python

大家好,小编来为大家解答以下问题,如何在手机上下载python 3.7版本,手机怎么下载python并安装,现在让我们一起来看看吧! 如何在手机上下载python 应用市场内搜索下载下载Python在您开始之前,在你的计算机将…

【leetcode100-025】【链表/快慢指针】环形链表

【题干】 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&a…

软件测试/测试开发丨Python 虚拟环境及pip环境管理

venv 虚拟环境管理 venv 虚拟环境的优点 独立的 Python 环境,不会产生冲突有助于包的管理删除和卸载方便 venv 使用方法 创建虚拟环境 python3 -m venv test 激活虚拟环境 切换指定文件夹Windows:/Scripts/macOS:/bin/ 执行指令&#xff…

欢迎来到Web3.0的世界:Solidity智能合约安全漏洞分析

智能合约概述 智能合约是运行在区块链网络中的一段程序,经由多方机构自动执行预先设定的逻辑,程序执行后,网络上的最终状态将不可改变。智能合约本质上是传统合约的数字版本,由去中心化的计算机网络执行,而不是由政府…

MIT 6.S081---Lab util: Unix utilities

环境搭建 基本环境 选择的是Vmwareubuntu的配置,注意ubuntu的版本一定要是20.04,作者试过16版本,不行,建议直接安装20.04版,不然环境配置都浪费不少时间有点得不偿失。(Vmware可以用Virtualbox代替&#…

【消息中间件】Rabbitmq消息可靠性、持久化机制、各种消费

原文作者:我辈李想 版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。 文章目录 前言一、常见用法1.消息可靠性2.持久化机制3.消息积压批量消费:增加 prefetch 的数量,提高单次连接的消息数并发消费:…

门诊病历系统教程,社区诊所电子处方系统软件操作教程

一、软件程序问答 门诊病历系统教程,社区诊所电子处方系统软件操作教程 1、电子处方软件在开处方时候,可以一键导入模板吗? 如下图,软件以 佳易王诊所电子处方软件V17.1为例说明 软件右侧点击 配方模板,只需输入症…

从零开始学Python系列课程第17课:容器型数据类型之列表(上)

前言 列表算是 Python 中比较常用的一种容器型数据类型,那么什么是列表,列表有什么样的作用致使它在 Python 中这么受欢迎呢?这便是接下来我们要一起讨论的问题。 在不久之前我们讲过变量,我们将数据使用变量保存,但是…

08.哲说建造者模式(Builder Pattern)

“The odds that we’re in ‘base reality’ is one in billions.” —— Elon Musk 这段话出自马斯克在2016年的一次演讲,“人类活在真实世界的几率,可能不到十亿分之一”。此言一出,可谓一石激起千层浪。有人嘲讽马斯克是“语不惊人死不休…