LeetCode Hot100 - 相交链表

【力扣hot100题】相交链表(17) 请注意相交节点的值不为 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]。给你两个单链表的头节点。 阅读详情

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。

图示两个链表在节点 c1 开始相交:
img

题目数据 保证 整个链式结构中不存在环。

注意,函数返回结果后,链表必须 保持其原始结构 。

自定义评测:

评测系统 的输入如下(你设计的程序 不适用 此输入):

intersectVal - 相交的起始节点的值。如果不存在相交节点,这一值为 0
listA - 第一个链表
listB - 第二个链表
skipA - 在 listA 中(从头节点开始)跳到交叉节点的节点数
skipB - 在 listB 中(从头节点开始)跳到交叉节点的节点数
评测系统将根据这些输入创建链式数据结构,并将两个头节点 headA 和 headB 传递给你的程序。如果程序能够正确返回相交节点,那么你的解决方案将被 视作正确答案 。

示例 1:
img

输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,6,1,8,4,5], skipA = 2, skipB = 3
输出:Intersected at ‘8’
解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。
从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,6,1,8,4,5]。
在 A 中,相交节点前有 2 个节点;在 B 中,相交节点前有 3 个节点。
— 请注意相交节点的值不为 1,因为在链表 A 和链表 B 之中值为 1 的节点 (A 中第二个节点和 B 中第三个节点) 是不同的节点。换句话说,它们在内存中指向两个不同的位置,而链表 A 和链表 B 中值为 8 的节点 (A 中第三个节点,B 中第四个节点) 在内存中指向相同的位置。

示例 2:
img

输入:intersectVal = 2, listA = [1,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1
输出:Intersected at ‘2’
解释:相交节点的值为 2 (注意,如果两个链表相交则不能为 0)。
从各自的表头开始算起,链表 A 为 [1,9,1,2,4],链表 B 为 [3,2,4]。
在 A 中,相交节点前有 3 个节点;在 B 中,相交节点前有 1 个节点。

示例 3:
在这里插入图片描述

输入:intersectVal = 0, listA = [2,6,4], listB = [1,5], skipA = 3, skipB = 2
输出:No intersection
解释:从各自的表头开始算起,链表 A 为 [2,6,4],链表 B 为 [1,5]。
由于这两个链表不相交,所以 intersectVal 必须为 0,而 skipA 和 skipB 可以是任意值。
这两个链表不相交,因此返回 null 。

提示:

  • listA 中节点数目为 m
  • listB 中节点数目为 n
  • 1 <= m, n <= 3 * 104
  • 1 <= Node.val <= 105
  • 0 <= skipA <= m
  • 0 <= skipB <= n
  • 如果 listA 和 listB 没有交点,intersectVal 为 0
  • 如果 listA 和 listB 有交点,intersectVal == listA[skipA] == listB[skipB]

进阶:你能否设计一个时间复杂度 O(m + n) 、仅用 O(1) 内存的解决方案?

思路

1. 先比较两个链表长度的长度
2. 较长的链表的指针向后移动两个链表长度差的位数
3. 同时遍历两个链表,指针向后移动
4. 当两个指针指向同一个节点时及找到了相交的节点
5. 此时可以返回两个节点任意一个

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        // 计算A,B链表的长度
        int lena = getLength(headA);
        int lenb = getLength(headB);
        ListNode pa = headA;
        ListNode pb = headB;
        // 较长的链表的指针向后移动 abs(lena-lenb) 位
        int dif = lena - lenb;
        if(dif > 0){    // A更长
            while(dif>0){
                dif--;
                pa = pa.next;
            }
        }else{  // B 更长
            int absdif = Math.abs(dif);
            while(absdif>0){
                absdif--;
                pb = pb.next;
            }
        }
        // 找到两个指针指向相同的位置
        while(pa!=null && pb != null && pa != pb){
            pa = pa.next;
            pb = pb.next;
        }
        // 此时 pa == pb 所以返回哪个指针都是可以的
        return pa;
        
    }
    // 计算链表长度
    public int getLength(ListNode head){
        int len = 0;
        ListNode p = head;
        while(p!=null){
            len++;
            p = p.next;
        }
        return len;
    }
}
GRCNN抓取网络学习3【自制Jacquard数据集模型调优】 请先完成,这样有利于下面操作的理解!然后第二步是,有了自己的数据集输入到GRCNN中是三种文件,那么可以GRCNN抓取网络学习2【自制Jacquard数据集训练】!既然学会训练,那么开展下一步计划模型调优。GRCNN源码:https://github.com/skumra/robotic-grasping。 阅读详情

相关推荐

GD32F303 ADC+DMA实战:用硬件过采样搞定多通道数据采集(附完整代码)

本文详细介绍了GD32F303系列MCU通过ADC+DMA结合硬件过采样技术实现多通道数据采集的实战方案。从硬件设计要点到软件配置全解析,包括时钟树配置、ADC模块初始化和DMA传输设置,提供了完整的代码示例和优化技巧,帮助工程师构建高精度、低功耗的数据采集系统。

weixin_30466039的博客 318

力扣---LeetCode160. 相交链表(代码详解+流程图)

第十弹 --- 力扣LeetCode每日一题

小沈.的博客 1837

亚马逊(Amazon ads)广告API申请步骤(已经更新完)

你如果是自己的店铺使用,就选择左边的、如果是授权的那种给别人用就选右边的。审核通过了才能进行下一步,我目前就是刚申请完,后续会持续更新!然后会调整到,下面的页面,选择Agency然后右上角点击创建。审核通过会发邮件到你的企业邮箱、时间大概是1-7天左右。输入对应的信息,点击提交审核,就可以开始申请了。1、广告平台跟卖家平台是分开的,这个概念要清楚。2、注册广告一定要用企业邮箱!回到首页,点击成为合作伙伴。注册了以后会跳转到广告。然后再点击加入合作伙伴。然后会弹出下面的页面。

阿泽的博客 5653

160. 相交链表 ——【Leetcode每日一题】

160. 相交链表 给你两个单链表的头节点 `headA` 和 `headB` ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 `null` 。

weixin_43412762的博客 686

Claude Code VSCode集成开发指南:AI编程助手完整配置

Claude Code与Visual Studio Code的深度集成为开发者提供了强大的AI编程支持。本文详细介绍Claude Code VSCode扩展的安装配置、功能特性和实际应用方法。通过完整的配置流程和代码示例,帮助开发者充分利用Claude AI的智能编程能力。文章涵盖从环境搭建到高级功能应用的完整指南,包括代码自动补全、智能重构、实时代码分析等核心功能的使用技巧,以及与现有开发工作流的整合方案。

2501_93058131的博客 5978

三、Crowd与JIRA、Confluence用户集成并SSO单点登录

补充说明: 通过此方法集成后,用户、组以及用户和组的关系都在Crowd系统中存储,但各个系统的权限仍由各系统控制,也可在JIRA和Confluence中添加和删除用户。 在做步骤4和步骤5的时候,要特别小心,确保当前系统的超级权限用户(一般为admin,具体看当前系统的全局权限配置)和组以及它们的关系已经在Crowd中同样存在了,才可切换并禁用当前系统的内部用户目录,否则可能造成权限丢失等严重问题(因为禁用了内部用户目录,而Crowd中又不存在这个超级权限用户和组或它们的关系,所以权限就丢失了) 维护示例

weixin_38621072的博客 2984

LeetCode 160. 相交链表 (超详细超容易理解的动画解法!!!)

大家好,我是程序员吴师兄,今天给大家图解的题目是 LeetCode 第 160 号问题:相交链表。更多题目图解请访问网站:https://www.algomooc.com一、题目描述编写一...

程序员吴师兄的博客 1070

【WLAN】【调试】再谈如何使用Wireshark解密WiFi数据包——使用TK信息

- 本文介绍了一种wireshark使用TK信息解密空口报文的方式,该方式对是否有关联过程的报文没有要求。

一介草民,只为生活。 1187

剑指 Offer 52. 两个链表的第一个公共节点_CodingPark编程公园

@链表编麻花

CodingPark 编程公园 546

芒果YOLOv8改进165:损失函数angleLoss:即插即用 | 独家首发原创新颖|公开数据集DOTA高效无损涨点0.5% | 旋转检测

YOLOv8改进:旋转检测Loss损失函数angleLoss:即插即用 | 独家首发原创新颖|公开数据集DOTA高效无损涨点0.5%

包括YOLOv5、YOLOv7、YOLOv8等模型改进 1148

SAP MD09 事务码中的物料需求追溯详解

物料需求追溯是指在物料需求计划中,追踪特定物料的需求来源和满足方式的过程。它帮助企业确定每个需求(如销售订单、独立需求、预留等)是由哪些供应元素(如库存、生产订单、采购订单等)来满足的。通过这种追溯,企业可以了解需求和供应之间的关系,从而优化生产和采购计划,减少库存积压,提升供应链效率。

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

【LeetCode】160. 相交链表

day184

weixin_43894455的博客 1226

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

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

力扣 Hot 100 刷题记录 - 相交链表

编写一个程序,找到两个单链表相交的起始节点。如果两个链表没有交点,返回null。

weixin_50893711的博客 467

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

LeetCode hot 100—相交链表

给你两个单链表的头节点headA和headB,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回null。图示两个链表在节点c1开始相交题目数据整个链式结构中不存在环。,函数返回结果后,链表必须。

rigidwill的博客 1121

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【力扣hot100题】(021)相交链表

答案用的哈希表是真没想到,很聪明,我都没想到可以用哈希表存储节点指针。想了半天最后用了最笨的方法……

s478527548的博客 249

LeetCode hot100——160.相交链表

的输入如下(你设计的程序。

weixin_42927227的博客 171

力扣Hot100--160.相交链表

解决办法:“把两条不同长度的链表拉成同样长”,从而保证两个指针最终同时到达相交节点(或同时到达 None)。—>“追及问题”思想。难点:正确处理链表不等长问题。

Lris_kk的博客 304

力扣HOT100(22)相交链表

最终两个指针一定会相遇:如果链表相交 相遇点就是第一个相交的节点。如果链表不相交,两个指针会同时走到NULL。当一个指针走到自己链表的末尾时,立即跳到另一个链表的头结点继续走。

m0_73857708的博客 74

[力扣 Hot100]相交链表

也是一道往年考研题,先遍历两个链表求长度,然后用两个指针分别指向A和B的首个元素。对长的链表遍历,直到长链表待遍历节点数等于短链表长度,随后两个指针同步移动,直到二者同指。评测系统将根据这些输入创建链式数据结构,并将两个头节点 headA 和 headB 传递给你的程序。如果程序能够正确返回相交节点,那么你的解决方案将被 视作正确答案。给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null。

qq_53627591的博客 534

LeetCode Hot 100 相交链表

请注意相交节点的值不为 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]。给你两个单链表的头节点。

2302_76776557的博客 1201

【leetcode hot 100 160】相交链表

【代码】【leetcode hot 100 160】相交链表。

longii11的博客 411

力扣Hot100 之160链表相交_8月18号

2.使用if 和while 循环时和C语言不一样的是,这里不需要使用花括号表示子部分内容,只需要使用缩进就可以,且每一个后面都要跟一个冒号。3.判断链表或者值是否为空时,直接 while n;循环来遍历链表并计算它的长度,而for循环是用来处理可迭代的对象,如元组,字典,字符串等元素。if(lenA>lenB):#B为长的链表。总结: 1. while循环和for循环的用法。

weixin_52933023的博客 282

LeetCode hot100 -相交链表

然后从headB进行循环遍历链表B,遍历时用if进行判断,看链表B中的元素是否已经在哈希集合中。时间复杂度:O(m+n),其中 m 和 n 是分别是链表 headA 和 headB 的长度。当其中一个指针到达链表的尾部时,则令其等于另一个链表的头部,然后继续开始遍历,例如head1遍历到headA的尾部时,令head1=headB。需要遍历两个链表各一次。如果两个链表不相交时,最后两个指针一定会在链表的尾部相遇,即两个指针最后的值都为null。如果两个链表相交时,两个指针一定会在两个链表相交的节点相遇。

2503_90669258的博客 402

【力扣hot100】160.相交链表

给你两个单链表的头节点headA和headB,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回null。图示两个链表在节点 c1 开始相交:题目数据整个链式结构中不存在环。,函数返回结果后,链表必须。输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,6,1,8,4,5], skipA = 2, skipB = 3输出:Intersected at ‘8’

Jerryqjr的博客 1068

【LeetCode Hot100 链表(上)】相交链表、反转链表、回文链表、环形链表、合并两个有序链表、两数相加

确定较长链表的起始位置,使得两个链表的剩余部分长度相同。通过让较长链表先走长度差步,保证两个链表在相同的“距离剩余部分”的起点上对齐。将这两个数相加,返回一个新的链表表示它们的和。:同步遍历两个链表,如果它们的当前节点相同,则返回该节点作为交点。,判断该链表是否为回文链表。给定一个链表,如果链表中存在环,返回环的起始节点;,请编写一个函数来反转该链表,并返回反转后的链表。,将它们合并成一个有序链表,并返回新的链表。:首先,遍历两个链表,分别计算它们的长度。,按顺序将它们的节点加入到新链表中。

Luo_LA的博客 921

力扣Hot100系列8(Java)——[链表]总结(上)(相交链表,反转链表,回文链表,环形链表,环形链表||,合并两个有序链表)

本文聚焦力扣 Hot100 中的六道链表经典题目,包括相交链表、反转链表、回文链表、环形链表、环形链表 II 及合并两个有序链表。文章结构清晰,每道题均依次呈现题目描述、核心代码、关键步骤解析及实例演示,重点拆解了双指针法、虚拟头节点、链表反转等核心技巧,深入阐释了环形链表入口查找等涉及的数学原理,帮助读者理解各题解题逻辑与边界处理要点,为链表类题目解题提供了系统的思路与参考。

2402_89049045的博客 1246
上一篇: 一些好用的软件
下一篇: LeetCode每日一题 对角线上的质数
Wenhao.
博客等级 码龄4年 77粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值