leetcode160 相交链表

news/2025/3/19 2:50:08/文章来源:https://www.cnblogs.com/haimishasha/p/18232115

题目描述

https://leetcode.cn/problems/intersection-of-two-linked-lists/description/

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

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

       

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

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

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

思路分析

问题转化:假如让两个链表从同距离末尾同等距离的位置开始遍历就好了。

问题分析:两个链表相交,相交点之后的长度是相同的,相交点之前的长度差如何消除?

问题解答:当较长的链表指针指向较短链表head时,长度差就消除了 

分情况讨论

一、两个链表在节点c1开始相交

a1->a2->c1->c2->c3->null->b1->b2->b3->c1

b1->b2->b3->c1->c2->c3->null->a1->a2->c1

二、两个链表不存在相交节点

2->6->4->null->1->5->null

1->5->null->2->6->4->null

代码实现

 1 /**
 2  * Definition for singly-linked list.
 3  * public class ListNode {
 4  * int val;
 5  * ListNode next;
 6  * ListNode(int x) {
 7  * val = x;
 8  * next = null;
 9  * }
10  * }
11  */
12 public class Solution {
13     public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
14         if (headA == null || headB == null) return null;
15         ListNode pA = headA, pB = headB;
16         while (pA != pB) {
17             pA = pA == null ? headB : pA.next;
18             pB = pB == null ? headA : pB.next;
19         }
20         return pA;
21     }
22 }

 

 

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

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

相关文章

联想ThinkServerRD440进入管理界面

1.开机按F1进入BIOS找到【Server Management】-选择【BMC network configuration】设置DHCP,F10保存2.将路由器下的网线连接到服务器的MGMT口3.重启进入BIOS查看获取的地址,在浏览器输入IP4.提示这个错误可以用Edge浏览器的IE模式打开,或者其他浏览器有IE/兼容模式就行默认账…

Kubernetes – 标签和选择器

一个名为Kubernetes的开源容器管理平台可自动执行容器的部署、扩展、降级和负载平衡(也称为容器编排工具)。它由 Google 使用 Golang 创建,因此拥有一个相当大的社区。Google 最终将其捐赠给了 CNCF(云原生计算基金会)。本质上,部署是 pod 上方的一层抽象。它类似于 pod …

OOP第4-6次作业总结

前言: 这三次作业中第四次作业是对前三次作业答题判题程序的迭代,而从第五次作业开始,则是新的家居强电电路模拟程序题目。就难度而言,第四次作业比第五、六次作业难,第五次作业是家居强电电路模拟程序的开头,所以自然简单,而且第六次作业还减少了两道题目,使得第六次作…

​ChatTTS:Win11本地安装和一键运行包!

ChatTTS 是一个专为交互式语音准备的AI语音合成项目,特点是自然,逼真,可把控声音细节,能说能笑能停顿。 音频播放器00:00 00:00 使用上 / 下箭头键来增高或降低音量。 具体内容,已经在另外的文章中介绍过。本文主要是关注两个点。如何在Windows上安装这个项目。分享一个已…

WPF 稳定的全屏化窗口方法

本文来告诉大家在 WPF 中,设置窗口全屏化的一个稳定的设置方法。在设置窗口全屏的时候,经常遇到的问题就是应用程序虽然设置最大化加无边框,但是此方式经常会有任务栏冒出来,或者说窗口没有贴屏幕的边。本文的方法是基于 Win32 的,由 lsj 提供的方法,当前已在 1000 多万台…

Kubernetes – 容器编排简介

在本文中,我们将研究 Kubernetes 中的容器编排。但首先,让我们探索容器兴起的趋势、容器编排的需求,以及它如何为 Kubernetes 占据主导地位和发展创造空间。 技术渗透到我们日常生活的方方面面,对软件、销售和交付基于软件的产品或仅在业务中使用软件的公司和组织产生了巨大…

Linux学习笔记(2)——ls指令

指令:ls -a: 列出所有文件 -l:以长格式显示指定目标信息 -F:在每个文件末尾加上字符说明该文件类型:@符号链接、|表示FIFOS、/表示目录、=表示套接字 -s:在每个文件前面打印出大小 -t:按时间进行文件排序 -A:列出除了“.”和“..”的文件 -R:将目录下所有子目录的文件列…

KeepassXC Keepass2android WebDav 同步数据库

1:方案介绍 KeepassXC 和 Keepass2android 都是用来存储用户密码数据的应用。KeepassXC 在 Win、Mac、Linux 都可以安装;Keepass2android 在 andorid 安这两个软件都支持 .kdbx 数据库,也就是说 KeepassXC 创建的数据库在 Keepass2android 中也能使用,但问题是数据库如何同…

golang在vscode执行测试用例如何显示测试代码覆盖率?只需要添加几个配置

背景 我们在开发完需求后,需要编写测试用例用于保证代码的正确以及后期变更中预防出现问题,那么如何保证我们的覆盖范围在我们预期,以及如何知道我们的测试用例覆盖了哪些代码呢? 如何实现 我们只需要在测试用例执行后,让ide在代码上渲染出哪些被覆盖哪些没有被覆盖即可,…

六月五日 关于计算机网络RIP和OSPF

今天主要是关于计算机网络的,今天的实验课要完成的是RIP和OSPF配置。 RIP协议(Routing Information Protocol,路由信息协议)是最早的动态路由协议,其原理简单,配置容易。它基于距离矢量算法来计算到达目的网络的最佳路径,通过跳数(hop count)作为度量路由之间的距离,…

小程序体验版加载不出内容如何解决

开发中我们在本地真机测试可以正常加载, 但是上传到体验版,扫码体验就无法正常加载,如何解决? 我们可以扫码后进入小程序页面,点击右上角的三个点, 打开调试模式