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.mzph.cn/news/633835.shtml

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

相关文章

css-动画效果学习示例

阴影 x-轴 y-轴 模糊度 颜色 (正负值可以表示角度问题) 可以加多个阴影 内置阴影 transition 可以添加动画延迟效果 向z轴缩进,开启透视respective 触发旋转效果 学习来源 :动画属性_哔哩哔哩_bilibili

如何做标准化?| 京东云技术团队

在现代信息化的市场环境和社会中,标准化已经成为了各种行业的一个重要的标志。标准化不仅可以提升生产效率,减轻质量问题,还可以增加产品的可靠性和互通性。在这篇文章中,我们将探讨如何做标准化,为您提供详细的指导和…

深入Docker5:安装nginx部署完整项目

目录 准备 为什么要使用nginx mysql容器构建 1.删除容器 2.创建文件夹 3.上传配置文件 4.命令构建mysql容器 5.进入mysql容器,授予root所有权限 6.在mysql中用命令运行sql文件 7.创建指定数据库shop 8.执行指定的sql文件 nginx安装与部署 1.拉取镜像 2…

docker:Java通过nginx获取客户端的真实ip地址

问题现象 我们的平台使用Spring Cloud微服务架构,使用Spring Boot构建Java服务,使用google的jib插件打成docker镜像包我们使用docker虚拟化部署,使用docker-compose统一管理所有服务,包括Java服务和nginx等组件我们前后端分离&am…

游戏《泰坦陨落2》msvcr120.dll丢失的多种解决方法分享

在Windows 11操作系统环境下,众多玩家在体验《泰坦陨落2》这款备受瞩目的射击游戏时,遭遇了一个令人困扰的技术问题:系统提示缺失msvcr120.dll文件。这一关键的动态链接库文件对于游戏的正常运行至关重要,它的缺失直接导致了《泰坦…

小白数学建模 Mathtype 7.7傻瓜式下载安装嵌入Word/WPS以及深度使用教程

数学建模Mathtype的下载安装嵌入Word/WPS以及深度使用教程 一 Mathtype 的下载安装1.1 安装前须知1.2 下载压缩包1.3 安装注册 二 嵌入Word/WPS2.1 嵌入Word2.1.1 加载项嵌入 Word2.1.2 宏录制嵌入 Word 2.2 嵌入 WPS2.2.1 加载项嵌入 WPS2.2.2 宏录制嵌入 WPS 2.3 嵌入时报错解…

【GNN报告】“青源Talk”-图可信学习与图大模型研究进展

北航王啸-图自监督学习 简介 介绍 浙大杨洋-探索大图模型预训练 总括 介绍 参考 Yang Yang - Zhejiang University dgraph-web DGraph: ALarge-Scale Financial Dataset for Graph Anomaly Detection All in One: Multi-task Prompting for Graph Neural Networks&#xf…

K8S-YAML

一、Kubernetes对象的描述 kubernetes中资源可以使用YAML描述(如果您对YAML格式不了解,可以参考YAML语法),也可以使用JSON。其内容可以分为如下四个部分: typeMeta:对象类型的元信息,声明对象…

一款开源且不限制大小可以设置过期时间的支持分享的的开源文件共享系统picoshare 部署教程

1.拉取镜像 2.部署 创建目录 mkdir -p /opt/picoshare/data 部署 其中:"somesecretpass"是密码 docker run \--env "PORT4001" \--env "PS_SHARED_SECRETsomesecretpass" \--publish 10005:4001/tcp \--volume "/opt/picoshare/data:…

最优解-最长公共子序列

问题描述 最长公共子序列(Longest Common Subsequence,LCS)即求两个序列最长的公共子序列(可以不连续)。比如3 2 1 4 5和1 2 3 4 5两个序列,最长公共子序列为2 4 5 长度为3。解决这个问题必然要使用动态规划。既然要用到动态规划,就要知道状…

oracle11g的闪回技术-闪回表-时间戳

--数据库闪回表 --1创建表(登录模式system) CREATE table dept2 as select * from dept;--此语句如果加上where条件可用于工作中数据的临时备份 select * from dept2;--查询新建表信息 --进入sql>set time on 通过时间点闪回 记录弹出的时间点&#…

Acrel-1000DP分布式光伏系统在某重工企业18MW分布式光伏中应用

摘 要:分布式光伏发电特指在用户场地附近建设,运行方式以用户侧自发自用、余电上网,且在配电系统平衡调节为特征的光伏发电设施,是一种新型的、具有广阔发展前景的发电和能源综合利用方式,它倡导就近发电,就…

一张图描述Http常用状态码(301、302、305、404、408等等)

301—永久移动。被请求的资源已被永久移动位置; 302—请求的资源现在临时从不同的 URI 响应请求; 305—使用代理。被请求的资源必须通过指定的代理才能被访问; 307—临时跳转。被请求的资源在临时从不同的URL响应请求; 40…

抖音VR直播新玩法,凸显各行业领域商业价值

抖音近期新推出了VR直播新玩法,用户不需要佩戴专业的显示头盔,只需要左右摇晃旋转手机,即可通过手机看到主播的全景直播。其实,VR直播并不是一个新东西,几年前,明星演唱会也用过VR直播拍摄技术,…

网站会遇到的几种攻击类型,及如何防御

随着互联网的普及和人们对网络使用的增加,网站安全问题变得越来越突出。无论是个人还是企业,都需要了解并采取措施来保护自己的网站和用户数据的安全。本文介绍了几种常见的网站安全攻击方式、潜在危害及其预防措施,帮助全面了解网站安全的各…

达梦数据库增删改查常用操作及-2723: 仅当指定列列表,且SET IDENTITY_INSERT为ON时,才能对自增列赋值问题修复

创建表 CREATE TABLE DICT ( "ID" INT IDENTITY(1, 1) NOT NULL, "TYPE" VARCHAR(30), "CODE" BIGINT, "NAME" VARCHAR(300), "VALUE" VARCHAR(200), "DESCRIPTION" VARCHAR(255), "OPERATOR"…

AI在检验数据方面的应用场景-九五小庞

AI在检验数据方面有广泛的应用前景,主要体现在以下几个方面: 自动化数据收集和分析:AI可以通过自动化技术,收集各种检验数据,如血液、尿液、生化指标等,并进行快速、准确的分析,提高检验效率。…

canvas绘制图形

目录 1、canvas绘制矩形 2、canvas绘制线 3、canvas绘制圆 4、canvas绘制多圈动画圆 HTML5<canvas>元素用于图形的绘制&#xff0c;Canvas API主要聚焦于2D图形。 1、canvas绘制矩形 canvas是一个二维网格&#xff0c;左上角坐标为(0,0)&#xff0c;横轴为x轴&…

C#,入门教程(38)——大型工程软件中类(class)修饰词partial的使用方法

上一篇&#xff1a; C#&#xff0c;入门教程(37)——优秀程序员的修炼之道https://blog.csdn.net/beijinghorn/article/details/125011644 一、大型&#xff08;工程应用&#xff09;软件倚重 partial 先说说大型&#xff08;工程应用&#xff09;软件对源代码的文件及函数“…

用 Python 制作可视化 GUI 界面,一键实现证件照背景颜色的替换

今天&#xff0c;我们来分享一下如何通过Python的十来行代码来替换证件照的背景颜色&#xff0c;那么在最后&#xff0c;小编也会将上述的流程制作成一个GUI界面来方便大家使用。关于界面的大致模样其实和先前的相差不大&#xff0c;大家应该都看过上一篇的内容 界面大体的样子…