【经典面试题】是否形成有环链表

news2024/9/21 4:32:44

1.环形链表oj

在这里插入图片描述

2. oj解法

利用快慢指针
请添加图片描述

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */

 typedef struct ListNode ListNode;
bool hasCycle(struct ListNode *head) {
    ListNode* slow = head, *fast = head;
    
    while(fast && fast -> next)
    {
        fast = fast -> next -> next;
        slow = slow -> next;
        if(slow == fast)
        {
            return true;
        }
    }
    return false;
}

3.面试加问

当然面试题不会这么容易,面试官随之抛下以下两个问题:
1.有没有可能快慢指针永远无法相遇呢?
2.如果快指针一次走3步,一次走4步,一次走n步还会不会相遇呢?

经过简单思考可以得出:当快指针一次走两步时,快慢指针每次行动的间隔值为1,那么此时当慢指针进入圆环开始被快指针追击时,必定会被追上。

那么如果快指针一次走三步呢?

有没有可能慢指针和快指针永远无法相遇呢?
这里进行简单的数学证明:

在这里插入图片描述
简单画图分析:
设链表从开始到进入环的长度为L,两指针在距换开始点的N的长度相遇,环长为C
从中可以得到哪些数学的等量关系式呢?
已知快指针的速度是慢指针的三倍,那么其走的路程也就是三倍,也就是每次追击两者之间的距离减少2

这里给出简单的思路图:
在这里插入图片描述
从图中可以看出

从图中可以看出当初始的N值为奇数时,且环长C为偶数时,两指针永远无法相遇。
那么现在就是要判断此种情况是否存在。

在这里插入图片描述
可推出此等式,从中我们可以发现,=左边为2L,永远为偶数,而右边为一个减式。
通过数学知识,我们得知当两数相减时,只有偶数-偶数或者奇数-奇数时得到偶数,所以当C为偶数时,(x+1)*C为偶数,此时N也为偶数,那么之前讨论的永远无法追上就时谬论了。
因此在进行第二轮追击时就可以追上,从而解得此题。

以及后面的快指针为4步N步都是同一解法。

如果被面试的是你,你答得出来吗?面试官先抛出一个简单代码题,随之考察面试者的数理分析能力,所以数学基础也是不可或缺的。

感谢大家的阅读,我将持续更新经典面试题。

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

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

相关文章

jenkins系列-01.docker安装jenkins

进入官网:https://www.jenkins.io/ 使用LONG term support版本:2.387.1 docker pull jenkins/jenkins:2.387.1-lts 拉取镜像: 编写docker-compose文件: 启动jenkins: 查看启动日志: 默认生成的密码:…

Go-知识测试-测试参数

Go-知识测试-测试参数 1. -args2. -json3. -o4. -bench5. -benchtime6. -cpu7. -count8. -failfast9. -list10. -parallel11. -run12. -timeout13. -v14 -benchmem 1. -args 指示go test 把-args 后面的参数带到测试中去。具体的测试函数会根据此参数来控制测试流程。 -args后…

c++ - 多态

文章目录 一、多态的概念二、多态使用三、多态的原理 一、多态的概念 1、概念: 多态就是具有多种形态,可以理解为同一个行为不同对象去完成表现出不同的状态,如: 二、多态使用 1、构成多态的条件 (1)派…

从线性变换的视角理解矩阵范数与行列式

在线性代数这一数学分支中,矩阵作为描述线性变换的工具,扮演着至关重要的角色。矩阵的范数和行列式是两个核心概念,它们分别从不同的角度揭示了矩阵及其所代表的线性变换的性质。本文旨在从线性变换的视角出发,探讨矩阵范数与行列…

C#小结:未能找到类型或命名空间名“xxx”(是否缺少 using 指令或程序集引用?)

方案一:移除这些失效的引用,下载对应版本的dll,重新添加引用 方案二:项目右键属性-调整目标框架版本(一般是降低版本) 方案三:调整编译顺序: 项目A:引用1、引用2 &…

底软驱动 | Linux用户空间与内核空间通信(Netlink通信机制)

1,什么是Netlink通信机制 Netlink是linux提供的用于内核和用户态进程之间的通信方式。但是注意虽然Netlink主要用于用户空间和内核空间的通信,但是也能用于用户空间的两个进程通信。只是进程间通信有其他很多方式,一般不用Netlink。除非需要用…

【pytorch】手写数字识别

https://blog.csdn.net/qq_45588019/article/details/120935828 基本均参考该博客 《深度学习原理Pytorch实战》 初步处理 导包 import torch import numpy as np from matplotlib import pyplot as plt from torch.utils.data import DataLoader from torchvision import tr…

esp32 usb cdc串口读写

void setup() { Serial.begin(); // 在USB CDC On Boot使能(Enabled)情况下,这里是USBCDC Serial.setDebugOutput(true); } void loop() { if (Serial.available() > 0) { // 检查是否有可用的数据 String input Serial.readS…

大模型应用中什么是IFT(指令微调)?

大模型应用中什么是IFT(指令微调)? 背景 随着人工智能技术的发展,特别是自然语言处理(NLP)领域的进步,预训练语言模型(如GPT-3、BERT)已经展现出了强大的语言理解和生成…

少儿编程 2024年6月电子学会图形化编程等级考试Scratch二级真题解析(判断题)

2024年6月scratch编程等级考试二级真题 判断题(共10题,每题2分,共20分) 26、下列积木的运算结果为false 答案:错 考点分析:考查逻辑运算符的使用,60>50为true,取反为false&…

Java高频面试基础知识点整理3

干货分享,感谢您的阅读!背景​​​​​​高频面试题基本总结回顾(含笔试高频算法整理) 最全文章见:Java高频面试基础知识点整理 (一)Java基础高频知识考点 针对人员: 1.全部人员都…

笔记 3 :linux 0.11 中的重要的全局变量 (b)

(15) 接着介绍缓冲区初始化,首先介绍一个全局量 end ,表示 源代码编译的终点,随后就是缓冲区: 上图里也介绍了关于缓冲区的其它几个全局变量。全局数组 hash_table 的位置肯定是在 end 以前定义的。end 后为…

算法学习笔记(8.4)-完全背包问题

目录 Question: 图例: 动态规划思路 2 代码实现: 3 空间优化: 代码实现: 下面是0-1背包和完全背包具体的例题: 代码实现: 图例: 空间优化代码示例 Question: 给定n个物品…

Python数据分析案例51——基于K均值的客户聚类分析可视化

案例背景 本次案例带来的是最经典的K均值聚类,对客户进行划分类别的分析,其特点是丰富的可视化过程。这个经典的小案例用来学习或者课程作业在合适不过了。 数据介绍 数据集如下: 客户的编码,性别,年龄,年收入&#…

创建yum源、NFS共享存储

1. YUM源的提供方式 1.1 配置本地源仓库 cd /etc/yum.repos.d/ vim local.repo [local] // 仓库类别 namelocal // 仓库名称 baseurlfile:///mnt // 指定 URL 访问路径为光盘挂载目录 enabled1 …

UML建模案例分析-类图中的关系

概要 类图之间的关系比较多,绝大多数情况下重点关注的还是关联关系、组合、聚合这三种,最终是如何对应到代码上的。 例子 以订单为例:订单和订单项之间是组合关系,这和数据库实体之间不一样。数据库实体有主外键,开…

绘画平台小程序的设计

管理员账户功能包括:系统首页,个人中心,学生管理,讲师管理,课程类型管理,课程信息管理,课程购买管理,作业类型管理 开发系统:Windows 架构模式:SSM JDK版本&…

24/07/08数据结构(2.1203)顺序表实现

size属于结构体的作用域 如果要访问一个结构体的指针用-> 如果要访问一个结构体的变量用. 点操作 #include<stdio.h> #include<stdlib.h> #include<string.h> #include"seqlist.h" //typedef struct seqList{ // SLDataType* _data; //需…

SpringBoot3.3.0升级方案

本文介绍了由SpringBoot2升级到SpringBoot3.3.0升级方案&#xff0c;新版本的升级可以解决旧版本存在的部分漏洞问题。 一、jdk17下载安装 1、下载 官网下载地址 Java Archive Downloads - Java SE 17 Jdk17下载后&#xff0c;可不设置系统变量java_home&#xff0c;仅在id…

Leetcode 剑指 Offer II 086.分割回文串

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定一个字符串 s &#xff0c;请将 s 分割成一些子串&#xff0…