【初阶数据结构题目】12.环形链表I

news2024/11/22 22:25:21

环形链表I

点击链接做题

思路:快慢指针

代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
typedef struct ListNode ListNode;
bool hasCycle(struct ListNode *head) {
    //快慢指针
    ListNode* slow = head;
    ListNode* fast = head;
    while(fast && fast->next){
        slow = slow->next;
        fast = fast->next->next;
        if(slow == fast){
            return true;
        }
    }
    //两个指针始终没有相遇
    return false;
}

思考1:为什么快指针每次走两步,慢指针走一步可以相遇,有没有可能遇不上,请推理证明!

slow一次走1步,fast一次走2步,fast先进环,假设slow也走完入环前的距离,准备进环,此时fastslow之间的距离为N,接下来的追逐过程中,每追击一次,他们之间的距离缩小1步

因此,在带环链表中慢指针走一步,快指针走两步最终一定会相遇。

思考2:快指针一次走3步,走4步,...n步行吗?

step1:

按照上面的分析,慢指针每次走一步,快指针每次走三步,此时快慢指针的最大距离为N,接下来的追逐过程中,每追击一次,他们之间的距离缩小2步追击过程中fastslow之间的距离变化:

分析:

  1. 如果N是偶数,第一轮就追上了

  2. 如果N是奇数,第一轮追不上,快追上,错过了,距离变成-1,即C-1,进入新的一轮追击

    a. C-1如果是偶数,那么下一轮就追上了

    b. C-1如果是奇数,那么就追不上,进入新的一轮追击

总结一下追不上的前提条件:N是奇数,C是偶数

step2:

假设:

环的周长为C,头结点到slow结点的长度为Lslow走一步,fast走三步,当slow指针入环后,slowfast指针在环中开始进行追逐,假设此时fast指针已经绕环x周。

在追逐过程中,快慢指针相遇时所走的路径长度:

fast: L+xC+C-N

slow:L

由于慢指针走一步,快指针要走三步,因此得出: 3 * 慢指针路程 = 快指针路程 ,即:

3L = L + xC + C − N (化简前)

2L = (x + 1)C − N (化简后)

对上述公式继续分析:由于偶数乘以任何数都为偶数,因此2L一定为偶数,则可推导出可能得情况:

  • 情况1:偶数 = 偶数 - 偶数

  • 情况2:偶数 = 奇数 - 奇数

由step1中(1)得出的结论,如果N是偶数,则第一圈快慢指针就相遇了。

由step1中(2)得出的结论,如果N是奇数,则fast指针和slow指针在第一轮的时候套圈了,开始进行下一轮的追逐;当N是奇数,要满足以上的公式,则 (x+1)C 必须也要为奇数,即C为奇数,满足(2)a中的结论,则快慢指针会相遇

因此, step1 中的 N是奇数,C是偶数不成立 ,既然不存在该情况,则快指针一次走3步最终一定也可以相遇。

快指针一次走4、5…步最终也会相遇,其证明方式同上。


提示:

虽然已经证明了快指针不论走多少步都可以满足在带环链表中相遇,但是在编写代码的时候会有额外的步骤引入,涉及到快慢指针的算法题中通常习惯使用慢指针走一步快指针走两步的方式。

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

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

相关文章

【机器学习】BP神经网络基本结构

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 BP神经网络基本结构1. 引言2. BP神经网络的基本概念2.1 什么是BP神经网络2.2 BP…

性价比高的蓝牙耳机推荐?分享我的2024年开放式耳机选购指南

2024年快到下旬了,市场上的蓝牙耳机价格也是差不多都沉淀起来了。所以就性价比高的蓝牙耳机的入手时间来说,那确实是年底左右的时间挑选入手会比较好一点。 而挑选性价比高的蓝牙耳机类型呢,我会首选开放式耳机。因为就开放式耳机而言&#…

yarn insntall 报错,显示 @achrinza/node-ipc@9.2.2 不支持现在的node版本

最近执行yarn install 时,突然遇到这样一个段报错 error achrinza/node-ipc9.2.2: The engine "node" is incompatible with this module. Expected version "8 || 10 || 12 || 14 || 16 || 17". Got "18.10.0" error Found incompa…

中创算力:以知识产权转化运用促进高质量发展

创新是引领发展的第一动力,保护知识产权就是保护创新。为深入实施知识产权公共服务普惠工程,促进知识产权公共服务更好服务高水平科技,国家知识产权局发布关于全面提升知识产权公共服务效能的指导意见。 在政策落地过程中,如何精…

《Milvus Cloud向量数据库指南》—Milvus Cloud赋能Ivy.ai:解锁大数据潜力,加速AI创新

引入Milvus Cloud:Ivy.ai的大规模全托管向量数据库解决方案新篇章 在人工智能驱动的数字化时代,数据成为了企业最宝贵的资产之一,而如何高效地管理和利用这些数据,则是决定企业能否在竞争中脱颖而出的关键因素。对于Ivy.ai这样致力于提升高等教育、医疗保健和公共部门沟通…

BM1反转链表[栈+头插法]

题目要求如下: 问题比较简单,就是将链表中的值进行反转即可。 一种比较简单的方式是使用栈链表的方式来实现,下面是相应的代码: #include <stdio.h> #include <stdlib.h> int arr[10001] {0}; struct ListNode* ReverseList(struct ListNode* head ) {if (head …

【数据结构】——介绍树

树 树的概念和结构 树是⼀种⾮线性的数据结构&#xff0c;它是由 n&#xff08;n>0&#xff09;个有限结点组成⼀个具有层次关系的集合。把它叫做树是因为它看起来像⼀棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;⽽叶朝下的。 • 有⼀个特殊的结点&#xff0c;…

韩国裸机云站群服务器是什么?有什么优势

韩国裸机云站群服务器是什么&#xff1f;韩国裸机云站群服务器是一种提供多IP地址分配和高性能网络服务的云计算解决方案。这种服务器结合了裸机服务器与云端技术&#xff0c;具有高性能、高可靠性和灵活可扩展性的特点。它广泛应用于需要多IP管理和高稳定性的网络应用&#xf…

unity项目语言设置成中文

步骤一&#xff1a;安装简体中文包 操作&#xff1a;在unity hub界面点击安装&#xff0c;然后在安装的unity版本中点击添加模块 操作&#xff1a;选择简体中文安装包进行安装 步骤二&#xff1a;切换简体中文包 操作&#xff1a;创建一个项目&#xff08;或者打开已经创建过…

从0开始的算法(数据结构和算法)基础(五)

哈希表 哈希表是什么&#xff1f; 哈希表&#xff08;Hash Table&#xff09;是一种数据结构&#xff0c;用于快速存储和查找数据。它通过将键&#xff08;key&#xff09;映射到数组中的索引位置来实现高效的查找、插入和删除操作。 乍一看不明白很正常&#xff0c;如果你学过…

国外一个免费的PDF转图片的网站,WPS VIP才能享受的大量功能,这里都有了。

国外一个免费的PDF转图片的网站&#xff0c;WPS VIP才能享受的大量功能&#xff0c;这里都有了。https://imagestool.com/ 免费PDF转图片 等WPS收费功能 【慧哥开源充电桩平台】下载源码地址 https://liwenhui.blog.csdn.net/article/details/134773779?spm1001.2014.3001.55…

入侵检测技术

课程目标 了解需要入侵检测技术的原因 熟知入侵检测系统&#xff08;IDS&#xff09;的概念、结构、分类及作用 掌握入侵检测技术及其应用 目录 Why 为什么要学习IDS 1.防火墙不能保证绝对的安全 网络边界的设备 自身可以被攻破 对某些攻击保护很弱 不是所有的威胁来自…

分而治之?如何高效提炼大型语言模型的推理能力

人工智能咨询培训老师叶梓 转载标明出处 虽然大模型&#xff08;如GPT-4&#xff09;在开放域问答&#xff08;ODQA&#xff09;、数学、科学以及自主智能体等领域展现出了非凡的推理能力&#xff0c;但是这些模型在进行复杂推理时&#xff0c;往往需要处理大量的参数&#xff…

项目管理中,项目经理有哪些优势?

项目经理在项目管理中扮演着至关重要的角色&#xff0c;他们的优势主要体现在以下几个方面&#xff1a; 一、计划与组织能力 超强的计划能力&#xff1a;项目经理需要制定各种计划&#xff0c;因此更擅长制定精确、合理的项目计划。他们能够有效地分解项目任务&#xff0c;排…

Elastic 基于 RAG 的 AI 助手:使用 LLM 和私有 GitHub 问题分析应用程序问题

作者&#xff1a;来自 Bahubali Shetti 作为 SRE&#xff0c;分析应用程序比以往任何时候都更加复杂。你不仅必须确保应用程序以最佳方式运行以确保出色的客户体验&#xff0c;而且在某些情况下还必须了解内部工作原理以帮助排除故障。分析基于生产的服务中的问题是一项团队运动…

麒麟V10系统 arm架构 安装docker

查看服务器环境 ## 查看系统版本&#xff0c;确认版本 cat /etc/kylin-release## 操作系统 uname -p## 内核版本&#xff08;≥ 3.10&#xff09; uname -r## iptables 版本&#xff08;≥ 1.4&#xff09; iptables --version iptables v1.8.1 (legacy)# 我这边是arm64/v8 架…

首届中文NL2SQL挑战赛亚军比赛攻略_BugCreater

关联比赛: 首届中文NL2SQL挑战赛 1. 任务描述 本次比赛的任务&#xff1a;根据Question、表格信息&#xff08;包含列名、列类型、内容&#xff09;&#xff0c;预测对应的SQL语句&#xff08;下图黄色部分&#xff09;。比赛只涉及单表查询&#xff0c;需要预测的有4部分&a…

pointofix下载与调整中文

想要在屏幕上批注&#xff0c;用pointofix最好&#xff0c;本篇文章告诉你如何下载pointofix和把pointofix语言弄成中文。 首先打开pointofix官网下载pointofix的安装包。 Pointofix - Herunterladen - Downloadhttps://www.pointofix.de/download.php点击这个pointofix180de…

基于CentOS Stream 9平台搭建Nacos2.4.0.1集群,并使用OpenResty反向代理集群,GRPC协议配置

目录展示 Nacos2.4.0.1集群搭建1. 下载2. 解压3.修改配置3.1分别修改下启动类中JDK路径以及启动大小3.2 分别配置数据源 修改端口去掉前面的#注释&#xff08;修改数据库地址、数据库用户名、密码&#xff09;If use MySQL as datasource:Count of DB:Connect URL of DB:密钥鉴…

SQL注入实例(sqli-labs/less-9)

0、初始页面 1、爆库名 使用python脚本 def inject_database1(url):name for i in range(1, 20):low 32high 128mid (low high) // 2while low < high:payload "1 and if(ascii(substr(database(),%d,1)) > %d ,sleep(2),0)-- " % (i, mid)res {"…