一个url指向的页面里面有另一个url,最终有一个url指向之前出现过的url或空,这两种情形都定义为null。这样构成一个单链表。给两条这样单链表,判断里面是否存在同样的url。url以亿级计,资源不足以hash。
本题可以抽象为有环和无环情况下的链表交叉问题:
情况一:两条单链表均无环
最简单的一种情况,由于两条链表如果交叉,他们的尾节点必然相等(Y字归并),所以只需要判断他们的尾节点是否相等即可。
情况二:两条单链表均有环
这种情况只需要拆开一条环路(注意需要保存被设置成null的节点),然后判断另一个单链表是否仍然存在环路,如果存在,说明无交叉,反之,则有交叉的情况。
情况三:两条单链表,一条有环路,一条无环路
这种情况显然他们是不可能有交叉的
附:如何判断一条单链表是否存在环路,以及找出环路的入口
快慢指针:在表头设置两个指针fast与slow,fast指针与slow指针同时向前移动,但是fast每次移动2个节点,slow每次移动1个节点,若fast指向null或者fast==slow时停止,这时如果fast指向null,则说明没有环路,若fast==slow则说明有环路。
找环路入口:当fast==slow时,将fast重新指向表头。slow原地不动。然后fast和slow在同时以每次一个节点的速度向前移动,当他们再次重合时,就是环路入口。证明如下:
1.证明fast和slow肯定会重合
在slow和fast第一次相遇的时候,假定slow走了n步骤,环路的入口是在p步的时候经过的,那么有slow走的路径: p+c = n; c为p1和p2相交点,距离环路入口的距离;fast走的路径: p+c+k*L = 2*n; L为环路的周长,k是整数。显然,如果从p+c点开始,p1再走n步骤的话,还可以回到p+c这个点同时p2从头开始走的话,经过n步,也会达到p+c这点。
2.fast和slow在p+c点会重合,显然他们从环的入口点就开始重合
分享到:
相关推荐
05_JavaSE面试题:递归与迭代
区块链:科创未来(六):迭代与竞争——以太坊的Layer 2扩容之路.pdf
Java试题-4:迭代器的应用 查询修改集合可以用集合自身的方法来实现 也可以用迭代器来实现 区别在于用迭代器对集合的修改操作更加安全
在vivo数据挖掘面试题中,讨论了数组和背包问题,这些都是算法领域中的经典问题,对应着leetcode中的相关题目。 明略科技AI岗位面试题中涉及到了熵、交叉熵的概念,熵是信息论中的一个基本概念,交叉熵则是衡量两个...
"百度面试题总结"这个资料包很可能包含了百度在招聘过程中对C++程序员的考察点,帮助应聘者更好地准备面试。 C++的基础知识点包括: 1. **基本语法**:C++的基础始于了解变量、数据类型、运算符、流程控制(如if...
迭代模式是一种设计模式,它提供了一种方法来顺序访问聚合对象的元素,而又不暴露其底层表示。在Java、C#等面向对象编程语言中,迭代器模式是常用的一种行为设计模式,它允许我们遍历集合对象的元素,而无需暴露集合...
腾讯NOW直播竞品分析报告:迭代方向参考.pdf
社会服务行业专题报告:AI赋能开启:迭代快速、影响广泛、全民参与.pdf
这份资源包含的110道Python面试题,以及相关的面试宝典和问题列表,将帮助求职者深入理解Python语言的关键概念,提高面试成功率。以下是一些核心的Python知识点,根据题目和资料内容,可以预期这些可能会出现在面试...
区块链:科创未来(六):迭代与竞争——以太坊的Layer 2扩容之路
迭代矩阵特征方程快速构建方法.pdf 迭代矩阵特征方程快速构建方法.pdf 迭代矩阵特征方程快速构建方法.pdf
传媒行业元宇宙专题一:技术迭代+生态完善,VR打开消费级市场.pdf
1. C语言面试题: - 基础概念:理解指针、内存管理(如堆栈和堆的区别)、预处理器宏、结构体与联合体。 - 动态内存分配:malloc、calloc、realloc、free的使用和注意事项。 - 函数:递归、函数指针、局部变量与...
以下是对C++中迭代器失效问题的详细分析: 1. **插入和删除操作**:在容器中进行插入或删除元素时,迭代器可能失效。例如,当你在迭代过程中向容器添加或移除元素,特别是如果插入或删除发生在迭代器当前指向的位置...
8. **回顾与改进**:每次迭代结束后,团队需要进行回顾会议,讨论遇到的问题、成功之处以及改进措施,以提升下一次迭代的效率和质量。 9. **风险管理**:在敏捷环境中,风险管理包括识别潜在问题,制定应对策略,并...
7. **问题与挑战**:迭代总结会识别遇到的问题、延迟和挑战,以及团队如何克服这些问题。这有助于预防未来类似问题的发生。 8. **学习与改进**:团队在迭代过程中学习到的经验教训和最佳实践会在总结中记录下来,为...
迭代法是一种在计算机科学和数学中广泛使用的求解方法,特别是在优化问题和数值分析中。在给定的“迭代法-穿越沙漠问题”中,我们可以理解这是一个基于迭代算法的编程挑战,可能是为了模拟或解决某种涉及到多步骤...
迭代算法是一种广泛应用于计算机科学和数学的解决问题的方法,它的核心思想是通过重复执行一组指令或步骤,逐步接近问题的解。在使用迭代算法时,主要涉及三个关键环节: 1. **确定迭代变量**:迭代变量是问题解决...
从给定的文件信息来看,这是一份关于百度质量部软件测试面试题的详细解析,涵盖了测试基础、测试设计、算法、逻辑题、编程及代码题、计算机基础、项目和背景、外部工具等多个方面。下面将针对文件中提及的一些关键...
元宇宙专题报告:技术迭代+生态完善,VR打开消费级市场(2022)(36页).pdf