【数据结构】链表中快指针和慢指针
目录
一、找出并返回链表的中间结点
二、输出链表中倒数第k个结点
三、判断链表中是否有环
四、两个单链表相交
一、找出并返回链表的中间结点
给你单链表的头结点 head ,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。
要求:只遍历一遍链表
可以使用快慢指针:fast 一次走两步,slow 一次走一步。当 fast == NULL(偶数个结点)或者 fast->next == NULL(奇数个结点)就停止,返回 slow。
struct ListNode* middleNode(struct ListNode* head)
{struct ListNode* slow, *fast; slow = fast = head; while(fast && fast->next){slow = slow->next; fast = fast->next->next;}return slow;
}
注意:
1、一次性定义多个指针时,第二个及以后的指针名前面都要加 * 。
2、while( )括号内是循环继续的条件。
二、输出链表中倒数第k个结点
输入一个链表,输出该链表中倒数第k个结点。
要求:只遍历一遍链表
快慢指针:fast 先走 k - 1 步,然后 fast 和 sliow 同时走,直到 fast 走到链表的最后一个结点。
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k )
{struct ListNode* slow, *fast; slow = fast = pListHead;while(--k){fast = fast->next;}while(fast->next){slow = slow->next; fast = fast->next;}
}
三、判断链表中是否有环
给你一个链表的头节点 head ,判断链表中是否有环。
使用快慢指针:fast 一次走两步,slow 一次走一步。
bool hasCycle(struct ListNode *head)
{ if(head == NULL)return false;if(head->next == NULL)return false;struct ListNode * slow = head;struct ListNode * fast = head;while(fast && fast->next){fast = fast->next->next;slow = slow->next;if(fast == slow)return true;}return false;
}
注意循环的条件是 fast != NULL && fast->next != NULL。
四、两个单链表相交
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。
要求:时间复杂度O(n),空间复杂度O(1)。
思路:1、分别求两个链表的长度 2、长的链表先走 差距步 3、同时走,第一个地址的结点相同就是交点
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB)
{struct ListNode* tailA = headA, *tailB = headB; int lenA = 1, lenB = 1; while(tailA->next){tailA = tailA->next; ++lenA;}while(tailB->next){tailB = tailB->next; ++lenB;}if(tailA != tailB)return NULL;int gap = abs(lenA-lenB); struct ListNode* longList = headA, *shortList = headB; if(lenA ‹ lenB){longList = headB; shortList = headA;}while(gap--){longList = longList->next;}while(longList != shortList){longList = longList->next; shortList = shortList->next;}return longList;}
相关文章:
【数据结构】链表中快指针和慢指针
目录 一、找出并返回链表的中间结点 二、输出链表中倒数第k个结点 三、判断链表中是否有环 四、两个单链表相交 一、找出并返回链表的中间结点 给你单链表的头结点 head ,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。 要求:只遍历…...
6_zookeeper集群配置
配置 一、配置myid文件 # 进入解压好的文件夹下面 touch myid vim myid # master节点写0,slave1节点写1,slave2节点写2二、配置zoo.cfg文件 1.在master节点编辑zookeeper配置文件 # 进入解压好的文件夹下面 cd conf/ cp zoo_sample.cfg zoo.cfg vim …...
Docker核心概念
容器介绍 Docker 是世界领先的软件容器平台,所以想要搞懂 Docker 的概念我们必须先从容器开始说起。 什么是容器? 先来看看容器较为官方的解释 一句话概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。 容器镜像是轻量…...
LD_PRELOAD 绕过 disable_function 学习
借助这位师傅的文章来学习通过LD_PRELOAD来绕过disable_function的原理 【PHP绕过】LD_PRELOAD bypass disable_functions_phpid绕过-CSDN博客 感谢这位师傅的贡献 介绍 静态链接: (1)举个情景来帮助理解: 假设你要搬家&#x…...
如何用JAVA实现布隆过滤器?
目录 引言 布隆过滤器的原理 1. 核心思想 2. 优缺点 布隆过滤器的使用场景 Java 实现布隆过滤器 1. 实现步骤 2. 代码实现 3. 代码说明 4. 测试结果 布隆过滤器的优化 总结 引言 布隆过滤器(Bloom Filter)是一种高效的概率数据结构࿰…...
游戏开发 游戏开始界面
目录 前言 一 游戏初始化界面的分析 二 游戏的大概框架 三 显示界面的开发 四 完整代码 总结 我们可以来看看游戏初始界面是什么样的 勇士游戏样例 前言 这里是开发游戏的初始界面 一 游戏初始化界面的分析 我们需要一个背景图,开始游戏图标࿰…...
Python解析 Flink Job 依赖的checkpoint 路径
引言 Apache Flink 是一个强大的分布式处理框架,广泛用于批处理和流处理任务。其 checkpoint 机制是确保容错的关键功能,允许在计算过程中保存状态,以便在故障时从最近的 checkpoint 恢复。本文详细探讨了一个 Python 脚本,该脚本…...
Javascript网页设计案例:通过PDFLib实现一款PDF分割工具,分割方式自定义-完整源代码,开箱即用
功能预览 一、工具简介 PDF 分割工具支持以下核心功能: 拖放或上传 PDF 文件:用户可以通过拖放或点击上传 PDF 文件。两种分割模式: 指定范围:用户可以指定起始页和结束页,提取特定范围的内容。固定间距:用户可以设置间隔页数(例如每 5 页分割一次),工具会自动完成分…...
计算机视觉算法实战——产品分拣(主页有源码)
✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ 1. 领域简介✨✨ 产品分拣是工业自动化和物流领域的核心技术,旨在通过机器视觉系统对传送带上的物品进行快速识别、定位和分类&a…...
汽车软件︱AUTO TECH China 2025 广州国际汽车软件与安全技术展览会:开启汽车科技新时代
在汽车产业智能化与网联化飞速发展的当下,汽车软件与安全技术已然成为行业变革的核心驱动力。2025年11月20 - 22日,AUTO TECH China 2025 广州国际汽车软件与安全技术展览会将在广州保利世贸博览馆盛大开幕,这场展会将汇聚行业前沿成果&#…...
Visual Studio打开文件后,中文变乱码的解决方案
文件加载 使用Unicode(UTF-8)编码加载文件 C:\WorkSpace\Assets\Scripts\UI\View\ExecuteComplateView.cs时,有些字节已用Unicode替换字符替换。保存该文件将不会保留原始文件内容。...
Python爬虫selenium验证-中文识别点选+图片验证码案例
1.获取图片 import re import time import ddddocr import requests from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from selenium.webdriver.support.wait import WebDriverWait from …...
MySQL后端返回给前端的时间变了(时区问题)
问题:MySQL里的时间例如为2025-01-10 21:19:30,但是返回到前端就变成了2025-01-10 13:19:30,会出现小时不一样或日期变成隔日的问题 一般来说设计字段时会使用datetime字段类型,这是一种用于时间的字段类型,而这个类型…...
计算机毕业设计Hadoop+Spark+DeepSeek-R1大模型民宿推荐系统 hive民宿可视化 民宿爬虫 大数据毕业设计(源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
前端性能优化面试题及参考答案
目录 如何通过合并文件减少 HTTP 请求次数? 列举 CDN 加速的适用场景与实现原理。 如何利用 HTTP/2 的多路复用特性优化资源加载? 描述 DNS 预解析的实现方式及其对性能的影响。 异步加载脚本时,async 与 defer 属性的区别是什么? 如何优化 AJAX 请求的并发数与优先级…...
【NLP 37、激活函数 ③ relu激活函数】
—— 25.2.23 ReLU广泛应用于卷积神经网络(CNN)和全连接网络,尤其在图像分类(如ImageNet)、语音识别等领域表现优异。其高效性和非线性特性使其成为深度学习默认激活函数的首选 一、定义与数学表达式 ReLU࿰…...
量子计算的威胁,以及企业可以采取的措施
当谷歌、IBM、Honeywell和微软等科技巨头纷纷投身量子计算领域时,一场技术军备竞赛已然拉开帷幕。 量子计算虽能为全球数字经济带来巨大价值,但也有可能对相互关联的系统、设备和数据造成损害。这一潜在影响在全球网络安全领域引起了强烈关注。也正因如…...
C#初级教程(5)——解锁 C# 变量的更多奥秘:从基础到进阶的深度指南
一、变量类型转换:隐式与显式的门道 (一)隐式转换:编译器的 “贴心小助手” 隐式转换是编译器自动进行的类型转换,无需开发者手动干预。这种转换通常发生在将取值范围小的数据类型赋值给取值范围大的数据类型时&#…...
Pytorch实现之GIEGAN(生成器信息增强GAN)训练自己的数据集
简介 简介:在训练数据样本之前首先利用VAE来推断潜在空间中不同类的分布,用于后续的训练,并使用它来初始化GAN。与ACGAN和BAGAN不同的是,提出的GIEGAN有一个分类器结构,这个分类器主要判断生成的图像或者样本图像属于哪个类,而鉴别器仅判断图像是来自于生成器还是真实样…...
使用PHP接入纯真IP库:实现IP地址地理位置查询
引言 在日常开发中,我们经常需要根据用户的IP地址获取其地理位置信息,例如国家、省份、城市等。纯真IP库(QQWry)是一个常用的IP地址数据库,提供了丰富的IP地址与地理位置的映射关系。本文将介绍如何使用PHP接入纯真IP库,并通过一个完整的案例演示如何实现IP地址的地理位…...
【SketchUp 2024】草图大师场景优化实战:群组与组件工具的高效协同与避坑指南
1. 群组与组件的基础认知:从零理解核心差异 刚接触SketchUp时,我最常混淆的就是群组和组件的区别。直到有次做室内设计项目,移动沙发时连带拽歪了整面墙,才真正明白两者的分界线。群组就像打包快递——把零散的几何体用胶带捆成包…...
实时代码演化追踪系统搭建实录:从零部署可审计的生成-变更-归因链路(含开源工具链v2.3配置清单)
第一章:智能代码生成与代码演化分析 2026奇点智能技术大会(https://ml-summit.org) 现代软件开发正经历从“人工编写主导”向“人机协同演进”的范式迁移。智能代码生成不再局限于补全单行语句,而是深度融入代码生命周期——从初始原型生成、API契约推…...
告别卡顿!Jetson Nano上优化VNC远程桌面的完整配置指南(基于Ubuntu 18.04)
Jetson Nano远程桌面性能优化实战:从卡顿到流畅的终极指南 在嵌入式开发领域,Jetson Nano凭借其强大的AI计算能力和紧凑的尺寸,成为众多开发者的首选平台。然而,当需要通过VNC远程操作图形界面时,许多用户都会遇到令人…...
别再让串口打印卡住你的STM32了!用FreeRTOS队列+环形缓冲区实现丝滑异步日志
STM32异步日志系统实战:FreeRTOS队列与环形缓冲区的完美结合 调试嵌入式系统时,串口打印是最常用的手段之一。但传统的同步打印方式往往会成为系统性能的瓶颈,特别是在实时性要求高的应用中。想象一下,当你正在调试一个电机控制系…...
嵌入式开发调试提速:修改U-Boot的mmcboot命令,让i.MX6每次启动都自动从TFTP拉取最新内核
嵌入式开发效率革命:定制U-Boot实现TFTP自动内核加载 每次修改内核后都要手动通过TFTP加载测试?在i.MX6开发板上反复输入相同的命令不仅浪费时间,还打断了开发者的思维连贯性。本文将带你深入U-Boot环境变量机制,通过改造mmcboot命…...
16 - Go 协程(goroutine):从基础到实战
文章目录🚀 16 - Go 协程(goroutine):从基础到实战什么是 goroutine?🚀 第一个 goroutinegoroutine 执行机制🔥 关键模型:GMP 模型🧠 调度流程(简化版&#x…...
Inno Setup 6中文安装包制作全攻略:从下载汉化到自定义脚本进阶
Inno Setup 6中文安装包制作全攻略:从汉化到脚本定制实战 在软件开发的生命周期中,专业化的安装程序是产品交付的重要环节。对于中文开发者而言,一个支持本地化、具备自定义功能的安装包不仅能提升用户体验,更能体现产品的专业度。…...
如何快速掌握跨平台资源下载:res-downloader终极完整指南
如何快速掌握跨平台资源下载:res-downloader终极完整指南 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 你是否曾…...
从卫星照片到 actionable 信息:手把手拆解遥感图像解译的全流程与实战技巧
从卫星照片到可执行信息:遥感图像解译全流程实战指南 当一张卫星影像呈现在你面前时,那些五彩斑斓的像素背后隐藏着怎样的故事?如何从这些看似抽象的图案中提取出对城市规划、农业监测或灾害评估具有实际价值的信息?本文将带你走进…...
终极Script Kit指南:探索强大API与核心组件的自动化奥秘
终极Script Kit指南:探索强大API与核心组件的自动化奥秘 【免费下载链接】kit Script Kit. Automate Anything. 项目地址: https://gitcode.com/gh_mirrors/kit1/kit Script Kit是一款功能强大的自动化工具,它提供了丰富的API和核心组件ÿ…...
