数据结构与算法——迭代打开url问题(链表)

Leetcode 160:相交链表(超详细的解法!!!) 编写一个程序,找到两个单链表相交的起始节点。 如下面的两个链表**:** 在节点 c1 开始相交。 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3 输出:Reference of the node with value = 8 输入解释... 阅读详情

一个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点会重合,显然他们从环的入口点就开始重合


http://iam42.iteye.com/blog/1680444
数据结构与算法实战指南:从Redis到排序,避坑性能陷阱与进阶应用 数据结构与算法是计算机科学的核心基础,它们定义了数据的组织方式(数据结构)和操作数据的步骤(算法),共同决定了程序的效率与可靠性。理解其原理,如时间复杂度和空间复杂度分析,是进行系统性能优化和资源管理的关键。在工程实践中,数据结构与算法的价值体现在能够针对特定场景选择最优解决方案,例如利用哈希表实现快速查找,或使用堆实现高效优先队列。常见的应用场景包括数据库索引设计、缓存系统实现、任务调度和路径规划等。本文以Redis数据结构和排序算法为例,深入探讨了数据结构选择如何直接影响系统性能,并揭示了链表误用、哈希 阅读详情

相关推荐

剑指Offer算法面试全攻略:数据结构与核心解题思想深度解析

算法是计算机科学的核心基础,其本质是通过一系列指令高效解决特定问题的过程。理解算法原理,关键在于掌握其背后的数据结构与设计思想。从时间与空间复杂度的权衡,到递归、分治、动态规划等经典范式的应用,算法的技术价值在于以最优方式处理海量数据,提升软件性能与系统效率。在工程实践中,算法广泛应用于搜索引擎、推荐系统、金融风控、路径规划等核心场景。本文聚焦于技术面试中的高频考点,系统梳理了链表、树、数组等核心数据结构的操作范式,并深入解析了双指针、滑动窗口、动态规划、回溯法等关键解题思想。通过构建纵横交错的知识网络,将

weixin_34055787的博客 453

关于两条链表交叉(交叉有环)的问题解决

大晚上睡不着,脑海里忽然出现关于链表的问题,可能是我晚上思考会比较冷静,不那么浮躁的原因,所以想到一些解决方法。 一、关于链表交叉 两条链表有交叉,最后会走到一起,如下面的丑图: 问题1,如何判断两条链表是否有交叉? 方法1、最简单粗暴的方法当然是遍历第一条链表的的每个节点的时候,完整遍历第二条链表,看是否有节点相同。 伪代码: while  p1 { while p2

DreamCLR的博客 1339

数据结构与算法实战指南:从核心原理到工程选型

数据结构与算法是计算机科学的基础,它研究如何高效地组织和处理数据。其核心原理在于通过合理的数据结构(如数组、链表、树、哈希表)和算法设计(如排序、查找、动态规划),在时间与空间复杂度之间取得平衡,从而提升程序性能。这项技术的价值在于,它是构建高性能、可扩展软件系统的基石,直接决定了系统在应对海量数据和高并发请求时的表现。在实际应用场景中,无论是数据库索引(B+树)、缓存系统(LRU算法)、实时排行榜(堆),还是搜索引擎(Trie树)、任务调度(优先队列),都离不开对数据结构和算法的深刻理解与恰当运用。本文将

weixin_34204722的博客 413

【数据结构】-- 相交链表-环形链表

如果链表的两条链的长度一样,链表两端对齐,解决这个问题将会变得非常简单,直接分别遍历两个链表,想等时的节点即为所求。我们想办法让链表对齐--分别从a和b遍历链表,分别求出以a开始和以b开始时的链表长度,求出a,b之差的绝对值k。然后再让较长一端先走k步,这样就对齐了。然后再同时遍历链表,两端相等时,这个节点即为所求。其实,这就是一个快慢指针的解法,快慢指针每次都只走一步,只不过快指针先走使链表对齐。

prettyxian的博客 1166

一文带你看懂SAP-HANA的基本架构与原理

创作不易,希望大家一键三连支持!!!♥♥♥创作不易,希望大家一键三连支持!!!♥♥♥创作不易,希望大家一键三连支持!!!♥♥♥。

丷江南南的博客 5070

全国各省份影像下载地址(11级别)

cesium中使用urltemplate加载,leaflet中使用tile加载,具体加载有问题可以给我留言。

资深三维GIS开发 5137

交叉链表

两个单向链表,找出它们的第一个公共结点。链表的结点定义为: struct ListNode {     int  m_nKey;           ListNode*   m_pNext; }; #include "stdafx.h" #include #include using namespace std; struct ListNode { int m_

Marshall的专栏 1644

RustDesk网页端远程控制实战:如何用Web Client替代传统客户端(附安全配置建议)

本文详细介绍了RustDesk网页端远程控制的实战应用,包括其核心优势、配置流程及安全加固方案。通过Web Client替代传统客户端,用户可实现跨平台无缝体验和企业级管理效率,特别适合临时协作和移动设备使用。文章还提供了JWT身份验证、LDAP集成等安全配置建议,确保网页端访问的安全性。

weixin_30836759的博客 250

交叉链表☆

题目: 设线性表L=(a1,a2,a3,...,an-2,an-1,an),采用带头结点的单链表保存,设计一个空间复杂度为O(1)的 算法,得到L'=(a1,an,a2,an-1,a3,an-2...) 分析: 这道题还是有一点复杂的,不过我们慢慢分析它。我们可以这样来操作,我们设置两个指针slow和fast,其中fast每次走两步, slow每次走一步,当fast到达链尾时,slow刚好处于链表中间节点,之前我们学过链表逆置,接下来...

北街lhy的博客 928

R语言实战:非正态数据下的Scheirer–Ray–Hare检验全流程解析

本文详细解析了在R语言中执行Scheirer–Ray–Hare检验的全流程。当数据不满足正态分布假设时,该非参数检验是传统双因素方差分析的有效替代方案。文章从原理、R环境配置、数据准备、代码实现、结果解读到事后比较与可视化,提供了完整的实战指南,帮助研究者稳健地分析多因素实验设计中的主效应和交互效应。

cc789的博客 404

如何构建高质量的 QA 问答知识库

NLP 技术落地最普遍的场景就是智能客服,如阿里的”小蜜“,京东的“JIMI”等等。NLP 技术也广泛应用于搜索系统。无论是“智能客服”,还是“搜索系统”,构建的前提是拥有“高质量的QA知识库”。今天聊聊“如何构建高质量QA知识库。”。 历史对话数据分布分析 基于公司现有系统积累的大规模对话文本数据,需要对文本数据进行归类处理,分析每个部分数据的占比,挖掘出有价值的文本通过 NLP 相关技术进行商业价值转化。下文以医疗领域来举例说明,通过输入对象,可以将文本分为客服输入和用户输入两部分。挖掘相关问题,主要从

Jiassheng的博客 2151

百度面试题:用链表交叉判断迭代打开url问题

一个url指向的页面里面有另一个url,最终有一个url指向之前出现过的url或空,这两种情形都定义为null。这样构成一个单链表。给两条这样单链表,判断里面是否存在同样的url。url以亿级计,资源不足以hash。 本题可以抽象为有环和无环情况下的链表交叉问题:   情况一:两条单链表均无环      最简单的一种情况,由于两条链表如果交叉,他们的尾节点必然相等(Y字归并

遨游网络huster的专栏 2953

PostgreSQL的学习心得和知识总结(八十二)|深入理解PostgreSQL数据库SQL语句的词法解析和语法解析流程

postgresql 词法解析语法解析流程

孤傲小二~阿沐的博客 5445

数据结构与算法常见面试题

数据结构与算法 找到单链表的三等分点,如果单链表是有环的呢 ? 用快慢指针,一个走一步,一个走三步。如果有环,先判断环在哪,找最后一个节点,然后用之前的无环的做法 从10万个数中找最小的10个,时间复杂度分析(最小堆,考虑内存)? 我们首先取10万个元素中的前10个元素来建立由10个元素组成的最小堆。这样堆顶元素便是当前已知元素的第10大的数;然后依次读取剩下的99990个元素,若读取的元素比堆顶...

qq_36741161的博客 968

S/4HANA Private Cloud 与 On-Premise 的 Key User Custom Fields 运输与升级避坑指南

本文探讨了SAP S/4HANA Cloud Private Edition和On-Premise系统中Key User Custom Fields的管理要点。文章指出,Custom Fields涉及元数据生成、对象一致性、传输治理等完整链路,操作不当会导致字段丢失或升级失败。关键建议包括:使用ATO Fiori App管理扩展项与传输绑定,配置正确的job user权限,避免在多系统并行开发同一字段。特别强调升级时需执行CFD_REGENERATE_IN_ONPREMISE报表,并通过标准传输机制推进变更

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 195

14.建立时间、保持时间以及vivado时序report的参考使用

在设计数字系统时,需要仔细考虑电路元件的选择和布局以及时序设计来满足建立时间和保持时间的要求。建立时间,又称为建立时间窗口或建立期,是指数字信号在触发器的时钟信号前沿到来之前,必须已经稳定存在的时间。在本章节将结婚扫建立时间和保持时间的基本原理,以及如何通过vivado处理建立时间和保持时间。通过使用同步电路,可以更好地控制数据传输的时序并满足建立时间和保持时间的要求。例如,在D触发器中,选择具有适当充电和放电特性的D端口元件可以确保在时钟信号前沿到达前数据已经稳定存在,并在时钟信号前沿到达后保持稳定。

FPGA/MATLAB学习教程/源码/项目合作开发 2984

百度面试题:迭代打开url问题

一个url指向的页面里面有另一个url,最终有一个url指向之前出现过的url或空,这两种情形都定义为null。这样构成一个单链表。给两条这样单链表,判断里面是否存在同样的url。url以亿级计,资源不足以hash。 本题可以抽象为有环和无环情况下的链表交叉问题:   情况一:两条单链表均无环      最简单的一种情况,由于两条链表如果交叉,他们的尾节点必然相等(Y字归并),所以只需要判...

iteye_4516的博客 137

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

终极指南:180+ C++算法与数据结构面试题解

想要在技术面试中脱颖而出?掌握算法与数据结构是通往成功的关键!🚀 这个开源项目汇集了180多个C++算法与数据结构问题,是每位程序员必备的面试宝典。 [![算法学习过程](https://raw.gitcode.com/gh_mirrors/al/algorithms_and_data_structures/raw/60f95dae236d13bd17f20df63268b524a776c8e

gitblog_00076的博客 1038

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【数据结构和算法】

将其中一个文件中的url使用Bloom filter映射为这340亿bit,然后挨个读取另外一个文件的url,检查是否与Bloom filter,如果是,那么该url应该是共同的url(注意会有一定的错误率)例题:给定 a、b 两个文件,各存放 50 亿个 URL,每个 URL 各占 64B,内存限制是 4G。因为每轮首次比较,都是用x角标上的元素和下一个元素进行比较。(1)取一分界值(通常arr[0]),比分界值小(<)的居左,否则(>=)居右。(2)左、右组如上步,各取分界值,小值居左,大值居右。

tongwx的博客 93

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

2021年经典大厂面试题——算法与数据结构版(含答案)

经典大厂面试题 请问,Object作为HashMap的key的话,对Object有什么要求吗? 请问 hashset 存的数是有序的吗? 输入一个二叉树和一个整数,打印出二叉树中节点值的和等于输入整数所有的路径 二叉树的搜索区间 现在有一个单向链表,谈一谈,如何判断链表中是否出现了环 随机链表的复制 找出数组中和为S的一对组合,找出一组就行 求一个数组中连续子向量的最大和 谈一谈,如何得到一个数据流中的中位数? 你知道哪些排序算法,这些算法的时间复杂度分别是多少,解释一下快排? 请你解释一下,内存中的栈

mirana的专栏 2265

数据结构习题三层价值:从算法思维到工程实战的进阶指南

数据结构是计算机科学的核心基础,它研究数据的组织、存储和操作方式,直接影响算法的效率与程序的性能。其核心原理在于通过抽象建模,将现实问题映射为可计算的数据关系,并利用特定结构的特性(如数组的随机访问、链表的动态增删、哈希表的快速查找)来优化操作。掌握数据结构的技术价值在于培养“将抽象问题映射到具体数据模型,并利用模型特性设计高效算法”的底层思维能力,这是区分代码实现者与问题解决者的关键。在实际应用场景中,这种能力不仅用于解决算法面试题,更贯穿于系统设计、性能优化和并发编程等工程实践。例如,在实现**LRU缓

weixin_34268579的博客 354

前端笔试常考设计模式,操作系统,数据结构,ACM模板,经典算法,正则表达式,常用方法

考试时允许使用草稿纸,请提前准备纸笔。考试过程中允许上厕所等短暂离开,但请控制离开时间笔试得分60%一般通过,面试答对80%才能通过。

luemeon的博客 6620

C++实现LRU缓存:哈希表与双向链表的经典组合

缓存是提升系统性能的核心技术,其核心在于通过高速存储(如内存)暂存热点数据,减少对慢速存储(如磁盘、网络)的访问。缓存淘汰算法决定了当缓存空间不足时,哪些数据应被移除。LRU(最近最少使用)算法因其在实现复杂度和效果间的优异平衡,成为最广泛应用的策略之一。其原理基于局部性原理,优先淘汰最久未被访问的数据。在工程实践中,高效实现LRU需要数据结构的有力支撑,哈希表提供O(1)的快速查找能力,而双向链表则能以O(1)的代价维护数据的访问顺序,两者的结合构成了工业级实现的基础。这种设计模式在数据库缓冲池、Redi

weixin_34416754的博客 486

用快马AI三分钟实现数据结构可视化工具——零基础玩转算法教学

前端用React实现可视化交互层,通过不同颜色区分节点状态(如待操作/已访问/已修改)。后端用FastAPI封装算法逻辑,比如二叉树旋转或图的广度优先搜索,返回每一步的中间状态数据。解决方案是给每个节点赋予UUID,变化时只传递差异部分,用JSON Patch协议增量更新。特别处理了递归算法的可视化,通过调用栈深度控制缩进动画。的AI辅助功能快速验证数据结构设计,它的交互式调试和零配置部署特别适合算法教学场景。在实现双向链表时,平台及时提示了指针未同步更新的风险,避免了经典的内存泄漏问题。

CrystalwaveEagle34的博客 841

算法数据结构实战指南:从面试刷题到工程应用的核心框架

算法与数据结构是计算机科学的基石,其核心在于通过高效组织与管理数据,优化程序的时空效率。从数组、链表、哈希表等基础数据结构,到递归、动态规划、贪心等核心算法思想,其原理共同构成了解决复杂计算问题的通用框架。掌握这些技术不仅能提升代码性能,更是应对技术面试、进行系统设计与性能优化的关键能力。在实际应用中,无论是高频面试题中的快速查找与路径规划,还是工程实践中的缓存设计、任务调度与字符串处理,都深度依赖对数据结构特性和算法思想的精准运用。本文聚焦于如何将经典的算法知识体系,转化为可直接用于面试准备与工程实践的决

weixin_33924312的博客 306

数据结构与算法核心精讲:从概念到代码实战

数据结构与算法是计算机科学的基础,它们定义了数据的组织、存储和操作方式,是构建高效软件的核心。其原理在于通过特定的逻辑结构(如线性表、树、图)和算法策略(如分治、动态规划),在时间与空间复杂度之间进行权衡,以优化程序性能。掌握这些基础概念的技术价值在于,能够显著提升代码效率、解决复杂问题,并优化系统资源使用。在应用场景上,从数据库索引(B+树)、缓存系统(哈希表)到路径规划(图算法),数据结构与算法无处不在。本文聚焦于**链表**、**栈**、**队列**、**二叉搜索树**和**哈希表**等核心结构的实现

weixin_30644369的博客 643
上一篇: C/C++——C和C++怎样分配和释放内存,区别是什么?
下一篇: linux系统下怎么输入EOF退出输入循环while(getline(cin, temp)){.....}
readyao
博客等级 码龄11年 243粉丝 163原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值