LeetCode面试题02.07链表相交

力扣题目链接
在这里插入图片描述

思想(数学):设链表A的长度为a,链表B的长度为b,A到交点D的距离为c,B到交点D的距离为d。显然可以得到两者相交链表的长度为:a - c = b - d ,变换一下式子得到:a + d = b + c.

用一个指针从链表A出发,走完后,接着从链表B出发,另一个指针从链表B出发,走完后,接着从链表A出发。若两个链表相交,当前一个指针走了a + d步时,此时后一个指针走b + c步,即走到了交点。若两个链表不相交,两个指针最终都会走向NULL;

总的来说是让双指针,一个指针走一遍A,再走B。另一个指针走一遍B,再走A。当两个指针走第二个链表时相等的点即为交点。若无交点, 两个指针最终都为NULL;

代码

public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {ListNode t1 = headA, t2 = headB;while (t1 != t2) {t1 = t1 != null ? t1.next : headB;t2 = t2 != null ? t2.next : headA;}return t1;}
}

思路(非数学):注意本题是找两个链表的交点,即两个节点是相同的,而不是简单的值相等。如果找到交点,那么两个链表后面的节点一定是一样的,因为他们是通过next指针连接起来的。

即如果找到两个链表相等的节点,那么就直接返回这个节点即可,后面的节点就无需再比较了,一定是相等的。

暴力解法是遍历链表A,每遍历一个节点,再遍历链表B看是否有相等的节点,如果有直接返回此节点即可。如果没有继续循环。时间复杂度为0(n*m)

public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {ListNode t1 = headA;while (t1 != null) {ListNode t2 = headB;while ( t2 != null) {if (t1 == t2) return t1;t2 = t2.next;}t1 =t1.next;}return null;
}
}

法三:首先遍历两个链表求出长度。然后求出两个链表长度的差值,让长的链表向后走差值步,让两个链表对齐。然后同时两个链表同时向后走,如果有相同的节点即找到交点,直接返回。时间复杂度为O(n + m)

在这里插入图片描述

代码

public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {ListNode a = headA, b = headB;int s1 = 0, s2 = 0;while (a != null){a = a.next;s1 ++;}while (b != null) {b = b.next;s2 ++;}a = headA;b = headB;if (s2 > s1) {//交换链表int temp = s1;s1 = s2;s2 =temp;ListNode tempNode = a;a = b;b = tempNode;}int gap = s1 - s2;while (gap -- > 0) { //走到与b同一起点a = a.next;}while (a != null) {if (a == b) return a;a = a.next;b = b.next;}return null;
}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/412305.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高效除甲醛 污染物 光触媒 5nm石墨烯二氧化钛粉CY05S

商品描述 技术指标&#xff1a; 项目 指标 型号 CY05S 粉末外观 蓝黑色粉体 粒径 <5nm 含量 99% 表面性质 亲水 使用方法&#xff1a; 把CY05S粉用蒸馏水&#xff0c;去离子水等&#xff0c;做成固含为1-2%的水溶液&#xff0c;喷涂于墙壁&#xff0c;天花板&a…

什么是身份治理和管理(IGA)

员工的数字身份在组织阶梯内移动时可能会发生变化&#xff0c;将对用户帐户应用与访问相关的修改的过程往往会变得费力且耗时&#xff0c;其强度与组织的人数成正比&#xff0c;为了简化用户身份管理&#xff0c;组织实施了身份治理和管理。 身份治理和管理&#xff08;IGA&am…

Java 方法中参数类型后写了三个点?什么意思?

1、...代表什么意思&#xff1f; 2、如何使用 3、注意事项 4、两个list&#xff0c;一个新的&#xff0c;一个旧的&#xff0c;旧列表中可能有新列表中存在的数据&#xff0c;也可能存在新列表中不存在的数据&#xff08;注&#xff1a;新旧列表中都不存在重复元素&#xff09;…

铝壳电阻有哪些特点和优势?

铝壳电阻是一种常见的电子元件&#xff0c;广泛应用于各种电子设备中。它具有许多特点和优势&#xff0c;使其在众多电阻类型中脱颖而出。以下是铝壳电阻的一些主要特点和优势&#xff1a; 散热性能好&#xff1a;铝壳电阻的外壳采用铝合金材料制成&#xff0c;具有良好的散热性…

什么是技术架构?架构和框架之间的区别是什么?怎样去做好架构设计?(一)

什么是技术架构?架构和框架之间的区别是什么?怎样去做好架构设计?(一)。 在软件行业,对于什么是架构,都有很多的争论,每个人都有自己的理解。在不同的书籍上, 不同的作者, 对于架构的定义也不统一, 角度不同, 定义不同。 一、架构是什么 Linux 有架构,MySQL 有架构,J…

YOLOv8在NX上的tensorrt的加速部署(60帧率)

所需环境 所有过程均可以参考本人所写的文章 (1)虚拟环境工具 MInforge3-Linux-aarch64 Jetson 平台都是RAM架构,平常的conda都是基于X86架构平台的。环境搭建参考文章 (2)YOLOv8_ros代码,采用自己创建的yolov_ros代码。yolov8_ros参考文章 (3)jetpack 环境(本篇文章…

如何运用工业智能网关将数据上传到设备数字化平台

在工业4.0和智能制造的时代背景下&#xff0c;设备数字化平台已经成为了企业实现高效、智能生产的关键。在这个过程中&#xff0c;工业智能网关发挥着至关重要的作用&#xff0c;它们作为连接设备与数字化平台的桥梁&#xff0c;是推动工业自动化的重要力量。 一、工业智能网关…

有什么办法解决vcruntime140_1.dll无法继续执行代码

在使用电脑的过程中你是否遇到过vcruntime140_1.dll丢失的问题&#xff1f;如果给你的电脑提示vcruntime140_1.dll无法继续执行代码&#xff0c;那么这将会影响你的电脑中一些程序&#xff0c;这可能会影响你的电脑正常使用&#xff01;那么有什么办法可以解决vcruntime140_1.d…

linux基础学习(4):rpm包与相关命令

1.linux内的软件包分类 linux只有2种软件包&#xff1a;源码包 与 二进制包 &#xff08;1&#xff09;源码包 源码包就是开源的源程序包&#xff0c;使用者可以直接看到其程序&#xff0c;也可以进行修改 &#xff08;2&#xff09;二进制包 由于源码包安装难度大&#x…

软件测评中心▏正式验收测试和非正式验收的优缺点简析

软件正式验收测试需要非常严格的管理&#xff0c;是对系统测试的延续&#xff0c;这种验收测试的测试用例应是系统测试的子集。非正式验收测试不像正式验收测试那么严格&#xff0c;不需要执行指定的测试用例&#xff0c;可以由测试人员自主决定&#xff0c;但制定测试用例时必…

准双向IO实验

准双向IO实验 一、实验目的 熟悉与了解准双向I/O口的构成原理。 二、实验要求 掌握准双向I/O口的输入&#xff0f;输出特性的运用。 三、实验原理 Dais-CMX08向用户提供的是按准双向原理设计的十六位输入/输出I/O口&#xff0c;当该位为“1”时才能用作输入源&#xff0c;上电…

[足式机器人]Part2 Dr. CAN学习笔记- Kalman Filter卡尔曼滤波器Ch05-5+6

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记 - Kalman Filter卡尔曼滤波器 Ch05-56 5. An Example 2D例子6. Extended Kalman Filter扩展卡尔曼滤波器&#xff08;EKF&#xff09; 5. An Example 2D例子 6. Extended Kalman Filter扩展卡尔曼…