数据结构之链表相交问题

(十六)两个链表相交问题 两个链表相交问题 【题目】给定两个单链表,这两个单链表可能有环,也可能无环。其中头结点分别为head1、head2。实现一个函数,如果两个链表相交,请返回相交的第一个结点;如果不相交返回NULL; 【要求】如果两个链表长度之和为N,时间复杂度要求为O(N),额外空间复杂度为O(1) 【解题思路】 第一步:判断两个链表是否有环,有环返回入环结点,无环返回NULL 判断链表是否有环 第二步:分情况讨论两个链表相交情况 (1)如果两个链表均无环,两个链表相交,那么从相交的部分开始都相等 ,结尾处也一定相 阅读详情

一.链表相交判断问题:

1.先各自求出链表的长度。

2.让长的走长度差步。

3.同时走第一次相遇的点就是交点。

下面是代码:

public class Solution {
    private int getLength(ListNode head) {
        int len = 0;
        for (ListNode c = head; c != null; c = c.next) {
            len++;
        }
        
        return len;
    }
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        int lenA = getLength(headA);
        int lenB = getLength(headB);
        
        ListNode longer = headA;
        ListNode shorter = headB;
        int diff = lenA - lenB;
        if (lenA < lenB) {
            longer = headB;
            shorter = headA;
            diff = lenB - lenA;
        }
        
        for (int i = 0; i < diff; i++) {
            longer = longer.next;
        }
        
        while (longer != shorter) {
            longer = longer.next;
            shorter = shorter.next;
        }
        
        return longer;
    }
}

 

二.链表的带环问题:

1.快慢指针(一个一步,一个两步,不能是一个一步,另一个n步 可能会一直错过)

2.如果快的和慢的相遇带环,如果快的走向null不带环。

3.求入环点:

                 1)转化为相交问题。

                 2)一个从起点出发,另一个从相遇点出发,一定相遇到入环点。

下面是展示代码:

public class Solution {
    public ListNode detectCycle(ListNode head) {
        ListNode fast = head;
        ListNode slow = head;
        // fast 遇到 null,表示不带环,返回 null
        // fast == slow,表示遇到相遇点了
        do {
            if (fast == null) {
                return null;
            }
            fast = fast.next;
            if (fast == null) {
                return null;
            }
            fast = fast.next;
            slow = slow.next;
        } while (fast != slow);
        // 求相遇点
        // 如果快的遇到 null,表示没有环,直接返回 null
        // 相遇点出发 + 起点出发,最终相遇
        ListNode p = head;
        ListNode q = slow;
        while (p != q) {
            p = p.next;
            q = q.next;
        }
        
        return p;
    }
}

三.相交+带环问题

    复杂链表的复制:

1):简单复制无法解决(因为是浅拷贝)

2):需要先复制结点,后解决random问题。

3):如果能从老的结点找到新的结点,问题好解决。

结构

1)老-新-老-新.....

2)处理random

3)拆开

 

 

 

LIN总线从入门到精通:低成本汽车通信协议原理与实战 在汽车电子和嵌入式系统中,串行通信协议是实现分布式控制的关键技术。其中,LIN(Local Interconnect Network)总线作为一种专为低成本应用设计的单主多从网络协议,其核心原理在于通过简化的“领导-汇报”通信模式,在满足车身控制、传感器数据采集等场景需求的同时,将硬件与布线成本降至最低。LIN总线采用标准化的帧结构,包含间隔场、同步场和受保护标识符场,并依赖调度表来管理通信时序,确保了网络的确定性与可靠性。其技术价值在于为车窗、座椅、灯光等非安全关键系统提供了高性价比的解决方案,是构建分层 阅读详情

相关推荐

AD9361 LVDS数据接口时序解析与FPGA实现

本文详细解析了AD9361 LVDS数据接口的时序特性与FPGA实现方法,重点探讨了DATA_CLK、Rx_FRAME等关键信号的时序关系及数据拼接技巧。通过Verilog代码示例和调试经验分享,帮助开发者解决跨时钟域处理、IQ数据重组等常见问题,提升射频收发系统的稳定性与性能。

weixin_29186249的博客 128

链表相交问题详解

但是A链表和B链表的长度不相等,我们怎么才能让curA指向a1的同时cueB指向b2呢?

yyykule的博客 1306

ContextCapture导入点云进行重建

ContextCapture导入点云进行重建

天桥飞熊的博客 1万+

两个单链表的相交问题

两个单链表的相交问题 目录两个单链表的相交问题一、两直链表相交问题二、两成环链表相交问题 下面将会在**时间复杂度为O(N+M)和不使用额外的空间,则空间复杂度为O(1)**的情况下解决: 两个直链表是否相交、有则求相交节点 两个有环的链表是否相交(详解),有则求相交点 一个直链表和一个有环链表(不存在这种情况的相交,后面详解) 一、两直链表相交问题 ​ 暴力循环,时间复杂度O(len1*len2),空间复杂度O(1),没遍历一个节点,就遍历另一链表,如果有节点相同(地址相同,地址相同节点的value也

qq_41980102的博客 817

Unity四部曲(核心)

需要先改成Cube复杂的展开留到unity进阶再说。

ultraman1234566的博客 2797

硅传CC1310二次开发必备:手把手教你用JTAG解锁被锁定的Flash存储器

本文针对硅传CC1310模块二次开发中常见的Flash锁定问题,提供了从原理剖析到实战操作的完整解决方案。详细介绍了如何使用Uniflash和Flash Programmer 2等工具进行Flash解锁和擦除,并强调了硬件连接稳定性与供电质量的关键作用,帮助开发者彻底解决烧录障碍,为后续应用开发铺平道路。

weixin_29189373的博客 252

链表相交问题

链表相交、c++

Learner_QUN的博客 243

FPGA实战笔记——SDRAM乒乓缓存与OV5640视频采集(VGA显示优化篇)

本文详细介绍了基于FPGA的SDRAM乒乓缓存技术在OV5640视频采集与VGA显示优化中的应用。通过设计多时钟域同步和双Bank乒乓缓存策略,有效解决了摄像头30fps输出与VGA 60fps显示之间的帧率不匹配问题,实现了720P高清视频的流畅稳定显示,为实时图像处理系统提供了可靠的硬件解决方案。

ss78901的博客 882

第7题:判断两个链表是否相交

欢迎转载,转载请务必注明出处:http://blog.youkuaiyun.com/alading2009/article/details/44801889 插播一下第6题: 腾讯面试题,给你10分钟时间,根据上排给出的十个数,在其下排填出对应的十个数,要求下排每个数都是先前上排那十个数在下排出现的次数。 上排的十个数如下:【0,1,2,3,4,5,6,7,8,9】 (PS:既然是一个10分钟的面

围炉夜话 1808

【水文学法总结】河道内生态流量计算方法(含MATLAB实现代码)

简介水文学法实现河道内生态流量计算

WW、forever的博客 5014

CloudCompare 二次开发(6)——插件中拖拽添加Qt窗口(区域生长算法为例)

手动拖拽的方式搭建Qt对话框界面的制作流程,以PCL中的点云区域生长算法为例进行制作。

点云侠的博客 2151

java数据结构与算法之链表相交问题

两个单向链表相交问题 问题描述: 有两个单向链表他们可能相交,也可能不相交。若相交则返回相交的节点,若不相交则返回null。 两个单向链表相交,有且仅有三种情况。 链表相交的问题算是链表问题中最难的问题之一了!!!! 一、逐一分析三种情况 【情况一】、两个无环链表 方法一、通过hash表来做 实现流程: 先从头到尾遍历一条链表,在遍历的同时将节点放入到hash表中 然后将第二条链表从头到尾开始遍历,遍历的同时首先查看hash表中有没有该节点 如果有则证明在第一条链表中已经将该节点加入过了,说明该节点

wenpan的博客 654

Underactuated Robotics - 欠驱动机器人学(一)- 全驱动与欠驱动系统

根据牛顿的观点,机械系统的动力学是二阶的(其状态由位置向量 q(也称为配置向量)和速度向量以及(可能还有)时间给出。二阶控制动力系统的一般形式是:其中 u 是控制向量。定义 1.1 (欠驱动控制微分方程) 二阶控制微分方程描述如下:在状态和时间 t 中,如果所得到的映射是可射的:对于每一个,都存在一个能产生预期响应的,那么系统就是全驱动的。否则,就是欠驱动(状态在时间 t)。

机器人控制与仿真应用 3377

数据结构与算法 - 链表相交问题:哈希表法与双指针法的效率对比

链表相交问题:哈希表与双指针法对比 本文深入探讨链表相交问题的两种高效解法。哈希表法通过存储节点实现O(m+n)时间查找,但需O(m)额外空间。双指针法则更为巧妙,通过同步遍历和路径交换消除长度差,在O(m+n)时间复杂度的同时仅用O(1)空间。实验表明,双指针法在大数据量时性能更优,是多数场景下的首选方案。文中包含详细的Java实现、复杂度分析和16种边界条件测试,帮助开发者全面掌握该算法及其优化思路。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

02.07.-链表相交

【代码】02.07.-链表相交。

maduit的博客 393

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

数据结构—Java版链表相交问题的终极解决方案

【题目】 判断两个链表(链表可以有环,可以无环)是否相交,若相交,则返回相交节点,不相交则返回null 1.判断两个链表是否相交 【思路】 两个链表分三种情况: ①两个链表均为非环链表; ②两个链表一个为环,一个非环; ③两个链表均为环 第一种情况非环链表根据链表的定义,只需比较两个链表尾节点是否相同,若相同则一定相交,不同则一定不相交; 第二种情况由于链表的next指针永远

Talk is cheap, Show me the code! 517

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

数据结构及算法:链表相关(如何判断单链表是否存在环、找出入环点、链表相交等问题)

目录 一、如何判断单链表是否存在环 方法一、穷举遍历 方法二、哈希表缓存 方法三、快慢指针(推荐) 方法四、Set集合大小变化 二、如何找出有环链表的入环点? 方法一、用HashSet来解决 方法二、计算循环(快慢指针) 情况一:多走一个环 情况二、当fast比slow 多走n个环 代码实现 三、如果存在环,求出环上节点的个数; 四、如果存在环,求出链表的长度; ...

天才小站 1561

160.相交链表

请注意相交节点的值不为 1,因为在链表 A 和链表 B 之中值为 1 的节点 (A 中第二个节点和 B 中第三个节点) 是不同的节点。换句话说,它们在内存中指向两个不同的位置,而链表 A 和链表 B 中值为 8 的节点 (A 中第三个节点,B 中第四个节点) 在内存中指向相同的位置。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,6,1,8,4,5]。从各自的表头开始算起,链表 A 为 [1,9,1,2,4],链表 B 为 [3,2,4]。,函数返回结果后,链表必须。

u010012355的博客 1762

LeetCode-160 链表相交

链表相交 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNo...

zhaohoutao的博客 120

链表相交 自解 官解

【代码】链表相交 自解 官解。

weixin_74788686的博客 102

2021.10.28 - SX02-07.链表相交

文章目录1. 题目2. 思路(1) 迭代3. 代码 1. 题目 2. 思路 (1) 迭代 利用一个指针curA先遍历链表A,再遍历链表B,另一个指针curB先遍历链表B,再遍历链表A,若两个链表有交点,则两个指针必然会同时指向交点;若两个链表没有交点,则两个指针必然会同时指向null。 3. 代码 public class Test { public static void main(String[] args) { } } class ListNode { int va

阿财继续努力 92

代码随想录算法训练营第四天24.两两交换链表中的节点19.删除链表中的倒数第N个节点.面试题02.07链表相交142环形链表

19.删除链表中的倒数第n个节点。24.两两交换链表中的节点。面试题02.07.链表相交。

qq_45699289的博客 168

Day4.24. 两两交换链表中的节点&19.删除链表的倒数第N个节点&02.07. 链表相交&142.环形链表II

1.在while循环中进行temp和temp1的定义通常设置临时节点来解题-转自代码随想录1.fast!=null 和 fast!=nullptr通常是一样的-转自代码随想录。

qq_45149820的博客 245

每日算法总结——判断链表是否有环、链表相交问题、二叉树递归/非递归遍历

递归方式本质上是系统帮我们维护一个栈,并针对我们的递归操作进行弹栈/压栈处理;,所以可以把打印操作换成压栈操作,即再准备一个收集栈,用于调转打印顺序。二叉树遍历属于必须要熟练掌握的内容,其中非递归遍历可能会在面试场合出现。,可以将对左右孩子的处理顺序调换,这样打印的顺序是。子树(如果有的话)重复上述左边界进栈,直到栈为空。如果存在环的话,快指针与慢指针一定会在环上相遇。递归遍历方法不难,代码也很好写,三者的区别在于。,然后将栈顶节点弹出打印,并将弹出节点的。的顺序依次压入栈(如果有的话)

qq_53661372的博客 295

数据结构算法-----链表

一、单链表简介 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快...

xiaoxsen的博客 332

跟左神学算法5 基础数据结构(链表相关)

内容: 1、链表基本结构 2、反转链表 3、打印两个有序链表的公共部分 4、判断一个链表是否为回文结构 5、单向链表划分区域 6、复制含有随机指针节点的链表 7、两个链表相交相关问题 1、链表基本结构 1 // 单向链表: 2 public static class Node { 3 public int value; ...

weixin_34110749的博客 160
上一篇: 数据结构之多个链表问题
下一篇: java中类的继承
王翔乐
博客等级 码龄8年 6粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值