求两个单向无环链表的第一个公共交点

3. KNN最近邻算法详解与关键技术剖析(理论篇) K最近邻(K-Nearest-Neighbour,KNN)算法可以说是最简单的分类算法,易于理解,其核心思想就是距离的比较,即离谁最近,就被归类于谁(群体投票的方式)。 通俗解释:“近朱者赤,近墨者黑”、“物以类聚,人以群分” 阅读详情

题目描述:给定两个无环链表,长度分别为n和m,求它们的第一个交点。

 

分析:如果两个链表有公共节点,也就是说两个链表从某一点开始,它们的next指针都指向同一个节点,但由于是单

向链表,那么每个节点都只有一个next指针,所以从第一个公共节点开始,之后它们所有的节点都是重合的,那么它

们的拓扑形状就像Y字型。

 

既然这样,那么我们可以这样做,如果它们的尾节点相同,说明这两个链表是相交的。如果要求交点,我们有一个很

好的算法,先求出这两个链表的长度,假设分别为xlen和ylen,并且xlen>ylen,先在链表x上走xlen-ylen的长

度,然后两个链表剩余的部分长度就一样了,这样再同时扫描,直到走到同一个节点结束,时间复杂度为O(m+n)。

 

 

核心代码:

struct node
{
    int val;
    node *next;
};

node *head,*p,*q;

void Init()
{
    head = new node();
    q = head;
}

void Insert(int x)
{
    p = new node();
    p->val = x;
    q->next = p;
    q = p;
    q->next = NULL;
}

int Length(int *t)
{
    int len = 0;
    while(t)
    {
        len++;
        t = t->next;
    }
    return len;
}

node *Find(node* &x,node* &y)
{
    int xlen = Length(x);
    int ylen = Length(y);
    node *Lx = x;
    node *Ly = y;
    if(xlen > ylen)
    {
        for(int i=1;i<=xlen-ylen;i++)
            Lx = Lx->next;
    }
    else
    {
        for(int i=1;i<=ylen-xlen;i++)
            Ly = Ly->next;
    }
    while(Lx && Ly)
    {
        if(Lx == Ly)
            return Lx;
        Lx = Lx->next;
        Ly = Ly->next;
    }
    return NULL;
}


 

 

其实本题还有一个方法也比较可靠:我们知道如果两个链表相交必成Y字型,那么我们把其中一个链表首尾相连,然

后来检测另外一个链表是否存在环,如果存在,则说明相交,并且我们可以求出环的入口点即为链表相交的第一个节

点。相反,如果不存在环,那么说明这两个链表不相交。

 

 

算法题5 找出两个链表的第一个公共结点 题目:两个单向链表,找出它们的第一个公共结点。 链表的结点定义为: struct ListNode {       int       m_nKey;       ListNode*   m_pNext; }; 分析:这是一道微软的面试题。微软非常喜欢与链表相关的题目,因此在微软的面试题中,链表出现的概率相当高。 如果两个单向链表有公共的结点,也就是说两个链表从某一结点开始,它们的 阅读详情

相关推荐

Curve+ 5.0.2:新一代色彩校准工具如何革新印刷行业标准

Curve+ 5.0.2作为新一代色彩校准工具,通过G7+校准算法和SCTV技术革新了印刷行业的色彩管理标准。该工具显著提升色彩精准度,减少打样时间和材料浪费,支持专色处理,实现跨材质色彩一致性,为印刷企业带来效率与质量的全面提升。

weixin_29228781的博客 528

如何判断两个链表是否相交并找出交点

解题思路 情况1:两个链表均不含有环 1、直接法 采用暴力的方法,遍历两个链表,判断第一个链表的每个结点是否在第二个链表中,时间复杂度为O(len1*len2),耗时很大。 2、hash计数法 如 果 两个链表相交,则两个链表就会有共同的结点;而结点地址又是结点唯一标识。因而判断两个链表中是否存在地址一致的节点,就可以知道是否相交了。可以对第一 个链表的节点地址进行hash排序,建立hash表,然后针对第二个链表的每个节点的地址查询hash表,如果它在hash表中出现,则说明两个链表有共 同的结点。这个方法

onlymayao的博客 6786

CMOS反相器版图设计全解析:PMOS/NMOS布局与VDD/VSS连接门道

版图设计是芯片从电路原理图迈向物理实现的必经桥梁,而CMOS反相器作为最基础的数字单元,恰好是理解这一过程的最佳切入点。在版图绘制中,PMOS与NMOS因导电类型和迁移率差异,需要在N阱与P衬底上分别规划,并呈现出不同的有源区尺寸。真正决定版图好坏的关键,往往在于VDD/VSS的完整连接——不仅要接通源漏,还要通过阱接触和衬底接触固定阱与衬底电位,防止寄生PN结正偏和闩锁效应。合理布局电源地线轨道、优化接触孔数量,能显著降低寄生电阻与电迁移风险。这些原理不仅适用于反相器,也是所有CMOS数字标准单元版图设计

weixin_29159441的博客 300

最近邻算法(KNN算法)

最近邻算法(KNN算法)

abc1234564546的博客 1万+

告别OpenAI API调用:手把手在本地CPU/GPU上部署fast-whisper中文语音识别模型

本文详细指导如何在本地CPU/GPU上部署fast-whisper中文语音识别模型,摆脱对OpenAI API的依赖。从环境准备、模型获取与优化,到CPU/GPU环境的具体部署步骤和性能优化技巧,全面覆盖本地化语音识别的实现方案,帮助开发者提升效率并保障数据隐私。

weixin_29988907的博客 305

【嵌入式 – GD32开发实战指南(ARM版本)】第1部分 基础篇 - 第1章 开发环境搭建

开发环境: MDK:Keil 5.30 MCU:GD32F207IK 1.1 GD32F207I-EVAL开发板简介 笔者使用的开发板是兆易创新设计的GD32F207I-EVAL开发板。 GD32F207I-EVAL开发板使用 GD32F207IK作为主控制器,主频120MHz、集成3MB Flash、256KB SRAM、通用定时器*10、Adv. TM*2、Basic TM*2、系统时钟*1、看门狗*2、RTC*1、USART*4、UART*4、I2C*3、SPI*3、I2S*1、SDIO*1、CAN

不问归期的博客 9986

【算法手记01】经典无环链表

本文简单讲解了链表的定义和算法应用。

DMUAllen的博客 976

YOLOv11【第一章:零基础入门篇·第1节】YOLOv11核心架构深度解析与环境配置,一文搞定!

🏆 本文收录于专栏 《YOLOv11实战:从入门到深度优化》。 本专栏围绕 YOLOv11 的改进、训练、部署与工程优化 展开,系统梳理并复现当前主流的 YOLOv11 实战案例与优化方案,内容目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。

**My Coding Family** 5507

链表有无环以及确定入环口详解

我们假设头结点距离入环口的长度为 a ,fast 和 slow 相遇的位置距离入环口 x ,环的长度为 r .那么由上图可知 slow 走的距离是 a+x,而由于相遇之前 fast 可能已经绕环 n 圈,那么 fast 所走的距离是 a + r*n + x,又由于。判断链表的入环口相当于判断两长度不一的链表的公共结点初始位置(长的先走两链表的差值,然后一起走),按道理我们应该让长的链表先走(假设长链表是初始链表,短链表是从环开始的链表),由于链表有环我们无法准确的知道链表的长度,那么如何判断入环口呢?

princekin_even的博客 432

【图像超分】论文复现:经典超分 | SAN的Pytorch源码复现,跑通源码,适配高版本的python/pytorch/cuda,使用EDSR-PyTorch进行训练和测试

本文介绍了单幅图像超分辨率重建方法SAN(二阶注意网络)的代码实现。文章详细说明了在高版本Python/Pytorch环境下适配SAN源码的方法,并提供了修改后的完整代码和预训练模型下载链接。 主要亮点包括: 将SAN模型实现整合到EDSR-Pytorch框架中,解决了高版本环境下的兼容性问题 提供了完整的数据集准备指南(DIV2K训练集和5个测试集) 给出了详细的测试命令,涵盖x2、x3、x4不同放大倍率 公开了预训练模型和可视化结果的下载资源 提供了修改后的适配高版本环境的代码。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1412

YOLOv8【第十章:多任务扩展深度篇·第1节】YOLOv8-Seg 实例分割:Mask原型生成与系数预测原理解析!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 1808

sessionstorage判断是否存在key_程序员经典算法面试题,两条单向链表的交点以及是否存在环的判断...

algorithm本文来讲几道有关单向链表的程序员算法面试题。1.给定两个单向无环链表,长度分别为x和y,判断它们有没有交点,如果有,求它们的第一个交点。根据单链表的性质,它的后继next节点只有一个,那么如果两条单向无环链表相交,可以确定从交点开始后面所有的节点一定都是重合的,那么它的形状就像一个“Y”字型。如下图上图中第一条链表长度为11,第二条链表长度为9,如果我们知道了两条链表的长度,求出...

weixin_39635567的博客 1650

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

两个链表求第一个公共交点

输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的) /** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * ...

zhaihm_的博客 146

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

两个链表找出第一个交点

题目:两个单向链表,找出它们的第一个公共结点。 链表的结点定义为: struct ListNode { int m_nKey; ListNode* m_pNext; }; 分析:这是一道微软的面试题。微软非常喜欢与链表相关的题目,因此在微软的面试题中,链表出现的概率相当高。 如果两个单向链表有公共的结点,也就是说两个链表从某一结点开始,它们的...

weixin_30480651的博客 100

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

如何判断两个单向链表是否有相交,并找出交点 (转)

判断两个链表是否相交:(假设两个链表都没有环) 1、判断第一个链表的每个节点是否在第二个链表中 2、把第二个链表连接到第一个后面,判断得到的链表是否有环,有环则相交 3、先遍历第一个链表,记住最后一个节点,再遍历第二个链表,得到最后一个节点时和第一个链表的最后一个节点做比较,如果相同,则相交 如何判断一个单链表是有环的?(注意不能用标志位,最多只能用两个额外指针) 一种O(n)的办法

GUANGWEIQIN的专栏 784

两个单向链表的第一个公共结点

转载,原文[url]http://blog.youkuaiyun.com/wcyoot/article/details/6426436[/url] 题目:两个单向链表,找出它们的第一个公共结点。 如果两个单向链表有公共的结点,也就是说两个链表从某一结点开始,它们的m_pNext都指向同一个结点。但由于是单向链表的结点,每个结点只有一个m_pNext,因此从第一个公共结点开始,之后它们所有结点都是重合的,不...

I'am GongQi. 152

判断两个链表是否相交,若相交,求交点。

第一种情况:两个链表均不含有环 思路: 1、直接法 采用暴力的方法,遍历两个链表,判断第一个链表的每个结点是否在第二个链表中,时间复杂度为O(len1*len2),耗时很大。 2、hash计数法 以链表节点地址为值,遍历第一个链表,使用Hash保存所有节点地址值,结束条件为到最后一个节点(无环)或Hash中该地址值已经存在(有环)。 再遍历第二个

qingdou_aixuexi的博客 624

寻找两个相交链表的第一个公共节点

Q:已知有两个链表,他们可能相交于某一点,求出该点。 方法1. 最简单的方法就是先顺序访问其中一个链表,在每访问一个节点时,都对另外一个链表进行遍历,看节点是否相等   直到找到一个相等的节点位置,如果链表长度分别是m,n 则时间复杂度为O(mn); 方法2. 对于第一个链表,每访问一个节点,对该节点做标记。访问第二个链表,如果该元素已经访问,则第一个这样的元素就是所求点。

Tim's Blog 1168

NC1 大数加法、NC127 最长公共子串、NC66 两个链表的第一个公共结点

以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。数据范围:s.length,t.length≤100000s.length,t.length≤100000,字符串仅由'0'~‘9’构成要求:时间复杂度 O(n)O(n)

m0_47536537的博客 709

找出两个链表的第一个公共结点

题目:两个单向链表,找出它们的第一个公共结点。 链表的结点定义为: struct ListNode { int m_nKey; ListNode* m_pNext; }; 分析:这是一道微软的面试题。微软非常喜欢与链表相关的题目,因此在微软的面试题中,链表出现的概率相当高。 如果两个单向链表有公共的结点,也就是说两个链表从某一结点开始,它们的m_pN

lei19950206的博客 445

27.两个链表的第一个公共结点

题目:输入两个链表,找出它们的第一个公共结点。 解析:这题严谨的做法应该是先判断两个链表相交是否有环,下面两种做法是可以合并一起的,即有环选1,没换选2。 1.有环的做法 ①定义一个快指针(一次移动一个结点)指向第一个链表和一个慢指针(一次移动两个结点)指向第二个链表,同时从链表头移动; ②如果链表相交后结点成环,快慢指针一定会在环里相遇,记录此时相遇的结点; ③定义另一指针指向其中一链表的头部,...

ZH956318的博客 238

剑指offer面试题之求两个链表的第一个公共点

1,问题: 输入两个链表,找出它们的第一个公共结点。(现在只考虑都是无环的) 2,想法 (1),先求出两个链表的长度,用两个指针,长链表的指针先走长度之差那么多步,然后两个指针一起走,遇到指针相同的就返回。 (2),遍历两个链表,把指针入栈,然后再同时出栈,若遇到不相同的则返回上一个相同的栈元素。 3,编码为: /* struct ListNode { int val; str

记录每一个小阶段的学习心得,持之以恒! 466

LeetCode练习题—两个链表的第一个公共结点(Java)

题目描述: 输入两个链表,找出它们的第一个公共节点。 注意: 1、如果两个链表没有交点,返回 null. 2、在返回结果后,两个链表仍须保持原有的结构。 3、可假定整个链表结构中没有循环。 示例: 思路: 输入两个链表,找出它们的第一个公共节点,可以分情况讨论: 1、若任意一个链表为空,那么直接返回null; 2、若为一般情况,要找公共起点,那么可以先让两个链表的长度保持一致;首先分别获取两个的...

zz070的博客 300

两个链表第一个公共点

输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。要求:空间复杂度 𝑂(1),时间复杂度 𝑂(𝑛)数据范围: 𝑛≤1000。

m0_67196959的博客 183

两个链表的公共子链表Java_[剑指offer][Java]两个链表的第一个公共节点

题目输入两个链表,找出它们的第一个公共结点。程序核心思想如果这个两个链表都没有环,则无环结构.png如何找到公共节点呢?可以先求出两个链表的长度差,让长的链表先走长度差步,然后两个链表一起走,直到有相同的节点则返回,否则如果一个链表走到null了,则返回null。如果这个两个链表都有环,就有三种结构:有环结构.png先比较两个链表的环的入口节点是否相同,如果相同则是第二种结构,那么可以用无环的做法...

weixin_32790385的博客 190
上一篇: malloc与new的区别
下一篇: 求两个有序数组的中位数
ACHelloWorld
博客等级 码龄14年 35粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值