首页 > 其他分享 >【经典面试题】环形链表

【经典面试题】环形链表

时间:2024-07-10 21:29:42浏览次数:22  
标签:偶数 面试题 slow ListNode 环形 fast next 链表 指针

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步都是同一解法。

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

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

标签:偶数,面试题,slow,ListNode,环形,fast,next,链表,指针
From: https://blog.csdn.net/Moment124/article/details/140333121

相关文章

  • leetcode||707.双向链表
    1.思路:设置虚拟头节点和虚拟尾节点2.为了提高查询效率,在根据索引查找节点的值时注意头尾虚拟节点的选择。java代码publicclassDoubleList707{//1.双向链表的结构privateclassListNode{intvalue;ListNodepre;ListNodenext;......
  • 计算机网络-HTTP常见面试题
    目录1.HTTP是什么?2.HTTP常见的状态码?3.HTTP常见的字段有哪些?4.GET和POST有什么区别:5.GET和POST方法都是安全和幂等的吗?6.HTTP缓存技术7.HTTP/1.1相比HTTP/1.0提高了什么性能?8.HTTP/2做了什么优化?9.HTTP3做了哪些优化10.SSL/TLS的握手过程1.HTTP是什么?......
  • 信息学奥赛初赛天天练-43-CSP-J2020基础题-链表、连通图、2进制转10进制、栈、队列、
    PDF文档公众号回复关键字:202407102020CSP-J选择题单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项)7.链表不具有的特点是()A.可随机访问任一元素B.不必事先估计存储空间C.插入删除不需要移动元素D.所需空间与线性表长度成正比8.有10个顶点的无向图至少......
  • 字节面试题:在线表格功能怎么实现?怎么测?
    最近有小伙伴私信问我怎么不更新了,期待更新,甚是感动。简述下自己近况:还在干测试,最近忙活的事情大概是自动化测试、性能测试以及业务等等,主打一个啥活都干。业余时间,尝试在短视频赛道搞一些个人兴趣领域的创作,所以博客不太更新,想分享的东西还是有的,后续仍然会记录一些工作心得,感......
  • Day4|24. 两两交换链表中的节点 & 19.删除链表的倒数第N个节点 & 面试题 02.07. 链表
    24.两两交换链表中的节点给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。输入:head=[1,2,3,4]输出:[2,1,4,3]这题很简单就不写思路了publicListNodeswapPairs(ListNodehead){L......
  • 19. 删除链表的倒数第 N 个结点
    [https://leetcode.cn/problems/remove-nth-node-from-end-of-list/description/?envType=study-plan-v2&envId=top-interview-150](19.删除链表的倒数第N个结点)mid(简单)快慢指针时间复杂度O(L)空间复杂度O(1)classSolution{publicListNoderemoveNthFromEnd(ListNode......
  • 每天两道Java面试题(一)
    1、this关键字和super关键字的区别及联系this关键字用在本类中。在类的内部,可以在任何方法中使用this引用当前对象。this关键字是用来解决全局变量和局部变量之间的冲突。this()可以调用同类中重载的构造方法,并且需要放在第一行。super关键字用在子类中。在子类中可以通......
  • 【数据结构】—— 双向链表
    文章目录1、双向链表的概念2、双向链表的接口实现2.1结构2.2初始化申请节点2.3插入数据尾插头插指定位置之后插入数据2.4删除数据尾删头删指定位置删除2.5查找2.6打印2.7销毁3、链表和顺序表的区别4、问题与思考1、双向链表的概念双向链表(DoublyLinkedList)是......
  • Day3| 203.移除链表元素 & 707.设计链表 & 206.反转链表
    前两天发烧了,这几天没更的后续会补齐链表结构如下classListNode{intval;ListNodenext;ListNode(){}ListNode(intval){this.val=val;}ListNode(intval,ListNodenext){this.val=val;this.next......
  • ES相关面试题
    题目:全文搜索对应的是什么功能,怎么构建索引,查询的时候怎么查怎么构建倒排索引,使用MySQL可以实现倒排索引的功能吗前情提要:我的项目中的商城项目中存在使用ElasticSearch的情况,所以特地弄了此篇来应对提问,以及还有一个爬虫项目中也使用到了questionOne全文搜索......