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

python练习:两个链表的第一个公共结点 题目 输入两个链表,找出它们的第一个公共结点。 分析 对于公共结点,解释应该是:如果两个单向链表存在公共节点,那么从第一个公共节点开始到最后一个节点都是公共节点。也就是说,相同的点,不仅值相同,后继节点也相同,那么同理公共结点后面的点也是不仅值相同,而且后继节点也相同。这样的话,就可以把两条链条看成Y字型了,某一个结点后面的点全部一样。 例如下图中,链表 6 - 7 就是两个链表的公共链表,而节点6就是第一个公共节点。 方法一 最直观的当然就是暴力法——双重循环。 那么在第一链表上顺序遍历 阅读详情
题目:输入两个链表,找出它们的第一个公共结点。链表结点定义如下:
struct ListNode
{
    int       m_nkey;
    ListNode* m_pNext;
};

分析:如果两个单链表有公共结点,那么公共结点之后的结点全都是是两个链表的公共结点。我们可以从后往前遍历两个单链表,直到遍历到的结点不同为止。
一、使用栈可以实现单链表的反向遍历。

class Solution 
{
public:
    ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2 )
    {
        stack<ListNode*> list1;
        stack<ListNode*> list2;

        ListNode* pList = NULL;

        while ( pHead1 != NULL )
        {
            list1.push( pHead1 );
            pHead1 = pHead1->m_pNext;
        }
        while ( pHead2 != NULL )
        {
            list2.push( pHead2 );
            pHead2 = pHead2->m_pNext;
        }

        while ( list1.empty() || list2.empty() )
        {
            if ( list1.top() != list2.top() )
            {
                return pList;
            }
            pList = list1.top();
            list1.pop();
        }
        return pList; 
    }
};

二、先将两个链表遍历一遍,得到两个链表的长度,然后先在较长链表走几步,然后同时前进,这种方法的时间复杂度也是O(m+n),但是不需要额外的辅助空间。

class Solution {
public:
    ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
        if ( pHead1 == NULL || pHead2 == NULL )
            return NULL;
        int lenList1, lenList2;
        ListNode* ppHead1 = pHead1;
        ListNode* ppHead2 = pHead2;
        while ( pHead1 != NULL )
        {
            lenList1++;
            pHead1 = pHead1->next;
        }
        while ( pHead2 != NULL )
        {
            lenList2++;
            pHead2 = pHead2->next;
        }
        pHead2 = ppHead2;
        pHead1 = ppHead1;

        int forward = lenList1 - lenList2;
        if ( forward < 0 )
        {
            forward = -forward;
            while ( forward-- )
            {
                pHead2 = pHead2->next;
            }
        }
        else 
        {
            while ( forward-- )
            {
                pHead1 = pHead1->next;
            }
        }

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

相关推荐

输入两个链表,找出它们的第一个公共结点

问题描述:输入两个链表,找出它们的第一个公共结点。

Ananbei的博客 3442

两个链表的第一个公共节点(简单难度)

目录题目概述思路与代码思路展现代码示例总结 题目概述 附上leetcode链接: 点击此处进入leetcode链接 思路与代码 思路展现 代码示例 总结

想要成为大佬的彪彪 761

DDR5内存设计实战:如何通过CA_ODT引脚优化信号完整性(附配置示例)

本文深入探讨DDR5内存设计中CA_ODT引脚的配置与优化策略,通过Group A/Group B分组控制提升信号完整性。详细解析了ODT机制、PCB布局要点及寄存器配置方法,并附实战案例与配置示例,帮助工程师解决高速信号传输中的反射问题,确保DDR5系统稳定运行。

weixin_29202213的博客 400

剑指Offer-两个链表的第一个公共节点

一、题目:两个链表的第一个公共节点题目:输入两个链表,找出它们的第一个公共结点。  链表结点定义如下,这里使用C#语言描述: public class Node { public int key; public Node nextNode; public Node(int key) { this...

ljh0302的专栏 1134

JetBrains Air:多Agent协同的IDE运行时架构解析

IDE智能编程正从单模型增强迈向多Agent协同范式。多Agent架构通过职责分离、上下文精简与运行时隔离,显著提升代码生成稳定性与合规性;其核心依赖轻量级嵌入式运行时(如ARL),支持AST级内存共享、eBPF安全拦截与毫秒级冷启动。该架构天然适配本地化部署、离线开发与高安全合规场景(如PCI-DSS、金融内网),并为Java/Python/TS等语言提供可扩展的规则驱动开发流水线。JetBrains Air正是这一技术路径的工程化落地代表。

weixin_30443075的博客 572

ModbusRTU串口读写报文解析

解析MODBUS报文的格式,讨论异常状态、读多个寄存器与写多个寄存器

Serendipitor的博客 9212

leetcode:两个链表的第一个公共节点(两种方法)

题目描述: 求两个链表的第一个公共节点 输入两个链表,找出它们的第一个公共节点。 如下面的两个链表: 在节点 c1 开始相交。 题解一: 我们先来分析一下这个题目,求两个链表的公共节点,对于这个问题我们一般都会设置两个引用分别指向两个链表头,然后遍历链表直到相遇,但是什么情况就能相遇呢? 由上图所示,我们分别设A链表非公共部分的节点长度为a,B链表公共节点的长度是b,A、B链表公共部分为c.当引用cur1从A链表的头节点开始向后走,引用cur2从B链表的头节点开始向后走,直到走到末尾,发现此时cur1和

yuiop123455的博客 1475

Arduino-CRSF库详解:嵌入式端CRSF协议解析与ELRS接收机集成

CRSF(Crossfire Serial Protocol)是一种面向FPV无人机的轻量级、高实时性串行通信协议,采用单总线异步传输与8位CRC-8校验机制,广泛应用于遥控链路与遥测交互。其核心在于帧同步(0xC8起始字节)、反相逻辑电平及无重传的广播式设计,对嵌入式平台的UART精度、电平匹配和状态机健壮性提出严苛要求。Arduino-CRSF库正是为资源受限MCU(如ESP32、STM32、ATmega328P)提供零配置、中断安全的协议解析能力,封装了CRC查表计算、超时恢复、多级同步验证等关键机制

weixin_35756690的博客 416

题目:输入两个链表,找出它们的第一个公共结点

题目:输入两个链表,找出它们的第一个公共结点。链表的定义如下: struct ListNode {      int m_nValue;      ListNode* m_pNext; };       看到这道题的时候,很多人的第一反应就是采用蛮力的方法:在第一个链表上顺序遍历每个节点,每遍历到一个节点的时候,在第二个链表上顺序遍历每个节点。如果第二个链表上的节点和第一个链表

岩枭的博客 7230

Python爬虫实战:携程旅游平台数据爬取(酒店+机票+景点),破解加密与反爬(附完整代码)

携程的反爬机制再复杂,核心逻辑都是“识别非真实用户的请求”,而爬虫的核心就是“让请求看起来像真实用户的行为”。本文的方案从登录态处理、参数加密破解、动态数据抓取,到反爬应对,都是围绕“模拟真实”展开:用Playwright模拟真实浏览器登录,用住宅代理模拟真实用户IP,用随机延迟模拟真实用户的操作频率。掌握了这个核心思路,无论平台的反爬如何升级,都能找到应对方法。当然,爬虫技术是一把双刃剑,合理使用才能发挥其价值。如果你的爬虫项目中遇到了携程的反爬问题,不妨按照本文的步骤试试,大概率能解决问题。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2607

《派出你的AI同事:WorkBuddy案例实战》067:按行业分类的案例索引

按行业分类的案例索引 —— 《派出你的AI同事:WorkBuddy案例实战》系列文章,配图已统一为规范示意图。

LuckyHanMo的博客 101

算法的学习笔记—两个链表的第一个公共结点(牛客JZ52)

通过同步两个指针的遍历方式,能够有效地解决两个链表寻找第一个公共节点的问题。该方法的时间复杂度为 O(m + n),空间复杂度为 O(1),在链表问题中是非常高效的一种解法。这种技巧值得学习,因为它不仅解决了本题,还可以运用于其他链表相关的题目中,比如寻找链表的环起点等。😁热门专栏推荐想学习vue的可以看看这个java基础合集数据库合集redis合集nginx合集linux合集手写机制微服务组件spring_尘觉springMVCmybits🤔欢迎大家加入我的社区尘觉社区。

业精于勤,荒于嬉 1994

2026年全国青少年信息素养大赛算法应用主题赛C++样题及答案解析

2026年全国青少年信息素养大赛算法应用主题赛C++样题

王老师青少年编程 3724

牛客题解 | 两个链表的第一个公共结点

牛客题库题解

wc529065的博客 1178

YOLOv8改进 | 主干网络 | 将主干网络替换为轻量化的ShuffleNetv2【原理 + 完整代码】

yolov8,yolov8创新,yolov8改进

kay_545 2566

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

剑指offer-两个链表的第一个公共结点

题目描述 输入两个链表,找出它们的第一个公共结点。 思路 首先要理解公共结点的含义,不是说两个节点所对应的val相等,而是说第一个公共点之后的next都是一样的,所以他们必然有公共的尾部。而题目中已经告诉了,两个链表必有公共结点,所以有以下解法: //方法一:运用HasnMap的特性 import java.util.HashMap; public class Solution { pu...

渴望飞翔的猪 256

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

输入两个链表,找出他们的第一个公共结点

输入两个链表,找出他们的第一个公共结点 解题思路: 此处类名我用汉字,主要为了自己练习,为了后期好找到进行回顾。最要用标准的英文类名呦 /* 题:输入两个链表,找出他们的第一个公共结点 重点审题:这种题只知道有两个链表,并不知道链表的长度 */ public class 链表第一个公共结点 { class Node{ Integer value; ...

越努力越幸运 678

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

efm32 入门.pdf

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

python 两个链表的第一个公共结点

''' 题目描述 输入两个链表,找出它们的第一个公共结点。 思路一: 先求出每个链表的长度,分别为a+n和b+n n表示两个链表公共部分的长度,从第一个公共节点向后的每个节点都是两个链表的公共节点 也就是说从第一个相同的公共节点往后的所有节点都相同 用指针1和指针2分别记录两个列表中当前感兴趣的位置索引值 则如果a>b,相当于让指针1比指针2多走a-b步,则找到第一个两个指针所指向的内容相...

WYXHAHAHA123的博客 522

剑指offer之两个链表的第一个公共结点

剑指offer之两个链表的第一个公共结点 题目描述解题思路Code 题目描述 输入两个链表,找出它们的第一个公共结点。 解题思路 只会暴力到怀疑人生,无果。书上给出了两种思路。由于两个链表尾部是一样的,所以方法1是用两个辅助栈存放两个链表,然后最后一个值和next地址相同的结点就是第一个公共结点,时空复杂度都是O(m+n)。方法2就更妙了,先获得两个链表的长度,然后让长的先走长-短的差的步数...

gq__97的博客 552

剑指offer--输入两个链表,找出它们的第一个公共结点

题目描述 输入两个链表,找出它们的第一个公共结点。 思路: 1、用HashMap: 1.第一个while是把pHead1的所有节点都放进去。 2.第二个while开始,对pHead2的每个节点都用 containsKey 方法来判断。 public class coding { public ListNode FindFirstCommonNode(ListNode pHead1, ...

u010160949的博客 308
上一篇: 数组中的逆序对
下一篇: 数字在排序数组中出现的次数
Findway_
博客等级 码龄10年 36粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值