leetcode160. 相交链表

news2025/3/11 3:29:39

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

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

在这里插入图片描述
题目数据 保证 整个链式结构中不存在环。

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

自定义评测:

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

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

示例 1:

在这里插入图片描述
输入: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 中第四个节点) 在内存中指向相同的位置。

思路:
两个指针分别指向两个链表表头,依次遍历判断两个指针指向的结点是否相等,若一方结点走到末尾为空后,指向另一个链表的头结点接着遍历比较,经过数学分析最多遍历m+n次,即可获得相交结点或者不存在相交结点。

#include <iostream>
#include <algorithm>
#include <vector>
#include <unordered_map>
using namespace std;

struct ListNode {
	int val;
	ListNode* next;
	ListNode() : val(0), next(nullptr) {}
	ListNode(int x) : val(x), next(nullptr) {}
	ListNode(int x, ListNode* next) : val(x), next(next) {}
};
ListNode* getIntersectionNode(ListNode* headA, ListNode* headB) {
    if (headA == nullptr || headB == nullptr)
        return nullptr;
    ListNode* pa = headA;
    ListNode* pb = headB;
    while (pa != nullptr || pb != nullptr)//走的次数一样 所以最后都停在nullptr
    {
        if (pa == pb)
            return pa;//判断是否相同 相同代表有交点
        if (pa == nullptr)
            pa = headB;
        else
            pa = pa->next;//每次pa只移动一次 
        if (pb == nullptr)
            pb = headA;
        else pb = pb->next;//每轮pb只移动一次
    }
    return nullptr;//没有交点
}
int main() {
	ListNode node1, node2, node3, node4, node5, node6, node7, node8;
	node1.val = 4;
	node1.next = &node2;
	node2.val = 1;
	node2.next = &node3;
	node3.val = 8;
	node3.next = &node4;
	node4.val = 4;
	node4.next = &node5;
	node5.val = 5;
	node5.next = nullptr;
	node6.val = 5;
	node6.next = &node7;
	node7.val = 6;
	node7.next = &node8;
	node8.val = 1;
	node8.next = &node3;
	ListNode* res = getIntersectionNode(&node1, &node6);
	if (res)
	{
		cout << res->val << endl;
	}
	else {
		cout << "no intersection node" << endl;
	}
	
	return 0;
}

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

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

相关文章

把脉分布式事务的模型、协议和方案

在当前的技术发展阶段&#xff0c;不同的业务场景对一致性、可靠性、易用性、性能等要求不同&#xff0c;应用架构可以根据实际场景的需求&#xff0c;灵活选择合适的分布式事务解决方案。行业中把分布式事务解决方案分为刚性事务方案和柔性事务方案这两大类。 就刚性事务这个…

leetcode328. 奇偶链表

给定单链表的头节点 head &#xff0c;将所有索引为奇数的节点和索引为偶数的节点分别组合在一起&#xff0c;然后返回重新排序的列表。 第一个节点的索引被认为是 奇数 &#xff0c; 第二个节点的索引为 偶数 &#xff0c;以此类推。 请注意&#xff0c;偶数组和奇数组内部的相…

CentOS 7安装GitLab、创建用户、创建Repo、拉取推送

效果图 前言 gitlab全球出名&#xff0c;包含免费的社区版CE、收费的企业版EE&#xff0c;在国内安装速度一般&#xff1b; gitlab极狐版是中国特供版&#xff0c;用起来就跟CE一样&#xff0c;推荐国内使用~ 实现步骤 - 安装&配置 先准备好gitlab服务对外的访问地址&am…

技术分享 | MySQL级联复制下进行大表的字段扩容

作者&#xff1a;雷文霆 爱可生华东交付服务部 DBA 成员&#xff0c;主要负责Mysql故障处理及相关技术支持。爱好看书&#xff0c;电影。座右铭&#xff0c;每一个不曾起舞的日子&#xff0c;都是对生命的辜负。 本文来源&#xff1a;原创投稿 *爱可生开源社区出品&#xff0c;…

使用Vite工具构建OpenLayers应用

vite作为最近大火的前端构建工具,吸引了大批开发者和工具框架作者的关注。vite自称为下一代的构建工具,这是要取代webpack的节奏啊。openlayers最新版本的案例代码就使用了vite来构建,因此这一篇文章我们来给大家示范一下如何使用vite来构建一个基于openlayers的应用。 首先…

从「搭子」文化,看融云如何助力垂类社交应用增长

互联网人拜佛 be like &#x1f446;&#xff0c;主打的就是一个垂直和精准。关注【融云全球互联网通信云】了解更多 其实&#xff0c;这也是年轻人的交友现状。最近随着大学生“特种兵式”旅游出圈的“搭子”友情&#xff0c;就是这样。 “搭子”&#xff0c;AKA 垂直细分领…

怎么把图片拼接成长图,3招教你快速处理

怎么把图片拼接成长图的方法&#xff0c;有没有快速便捷可一键操作的呢&#xff1f;当我们把图片拼接成长图有很多优点&#xff0c;比如说我们在图片文件传输的时候就更加快捷方便&#xff0c;还有就是我们在图片展示的时候更加统一。虽然有这么多优点&#xff0c;但是如果我们…

【RobotFramework自动化测试】

robotframework介绍 RF是一个基于Python语言开发的&#xff0c;可扩展的&#xff0c;是以关键字驱动模式的自动化测试框架。RF最新的版本是2019 年7月份发布&#xff0c;7月份之前只支持python2.7&#xff0c;7月之后支持3.X的版本 robotframework的安装 安装python环境&…

【JUC】CAS

【JUC】CAS 文章目录 【JUC】CAS1. 概述2. Unsafe类 1. 概述 在Java并发编程中&#xff0c;CAS是一种非阻塞的算法&#xff0c;即Compare and Swap&#xff08;比较并交换&#xff09;。 CAS通过比较内存中某个位置的值和预期值&#xff0c;如果相同&#xff0c;则将该位置的…

springcloud各个组件搭配使用演示

springcloud各个组件使用demo Eureka服务注册中心 创建三个eureka服务注册中心,分别为: eureka-server1 spring:application:name: eureka-server1 server:port: 8001eureka:client:service-url:defaultZone: http://localhost:8002/eureka/,http://localhost:8003/eureka/…

EtherCAT和Ethernet的不同点有哪些, 通信周期又是什么意思?

小伙伴们&#xff0c;我们又来了。上期大概介绍了EtherCAT的一些特性&#xff0c;本期我们将会更详细的介绍一下EtherCAT的实现方式&#xff0c;通信周期的意义到底是什么、SDO和PDO到底是什么等概念。 首先要声明&#xff0c;尽管本期介绍略微深入&#xff0c;实际上小伙伴使…

超详细!腾讯NLP算法岗面经(已offer)

作者 | ZipZou 整理 | NewBeeNLP 面试锦囊之面经分享系列&#xff0c;持续更新中 可以后台回复"面试"加入交流讨论组噢 分享一篇旧文&#xff0c;希望大家都成功上岸~ 写在前面 首先来段简单的自我介绍&#xff1a;2021届硕士&#xff0c;硕士期间未有实习经历&…

【Micropython】ESP8266通过NTP同步本地RTC时间

【Micropython】ESP8266通过NTP同步本地RTC时间 &#x1f4cc;相关篇《【MicroPython esp8266】固件烧写教程》✨本案例基于Thonny平台开发。✨ &#x1f4cb;实时时钟 (RTC) &#x1f516;RTC属于machine模块中的子类。 datetime([value]): 获取或设置当前时间。如果没有指定…

GitLab合并操作自动构建Jenkins任务

最终实现当git库 有合并操作自动构建jenkins的指定任务 1、安装Build Authorization Token Root插件 Build Authorization Token Root&#xff1a;使用拥有读取权限的匿名用户访问&#xff0c;配置钩子链接时需要用到,如果不使用&#xff0c;每次访问链接都需要提供认证&#…

Rancher 部署带有密码认证 Elasticsearch 服务

Rancher 部署带有密码认证 Elasticsearch 服务 1. 工作负载部署 镜像地址 elasticsearch:7.6.2端口映射 NodePort 9200 -> 31627(随机)环境变量 node.namees1 network.host0.0.0.0 discovery.typesingle-node配置映射 新建配置映射&#xff0c;内容如下&#xff1a; xpack.…

Python VTK 绘制线条

前言&#xff1a; Python-VTK绘制线条&#xff0c;主要绘制直线和曲线 主要函数介绍&#xff1a; vtk.vtkPoints() 在VTK中用于定义点的类&#xff0c;使用points.InsertPoint(index, x, y, z) 即可插入点集。函数中&#xff0c;第一个参数是点的序号&#xff0c;后面是三个参…

垃圾回收面试总结

堆空间的基本结构 Java 的自动内存管理主要是针对对象内存的回收和对象内存的分配。同时&#xff0c;Java 自动内存管理最核心的功能是 堆 内存中对象的分配与回收。 Java 堆是垃圾收集器管理的主要区域&#xff0c;因此也被称作 GC 堆&#xff08;Garbage Collected Heap&am…

含可再生能源的配电网最佳空调负荷优化控制

目录 1 主要内容 2 部分代码 3 程序结果 4 程序链接 1 主要内容 该程序完美复现《Optimal air-conditioning load control in distribution network with intermittent renewables》&#xff0c;中文题目&#xff08;翻译&#xff09;为《含可再生能源的配电网最佳空调负荷…

如何快速用本地文件建立一个Url资源定位符

今天有一个需求&#xff0c;用easyExcel从服务端的一个Url来获取excel做处理。 搜了很多方案&#xff0c;首先要解决的一个问题就是&#xff0c;我得从一个Url获取一个excel&#xff0c;那就意味着我要上传一个文件到我的服务器上&#xff0c;把文件传递上去&#xff0c;然后访…

《API加速优化方案:多级缓存设计》

点击上方蓝字关注我们&#xff01; 这事情还得从两天前说起...话说迭代上了个接口&#xff0c;该接口横跨多个应用服务&#xff0c;链路如下图所示&#xff1a; 问题来了&#xff1a;通过skywalking&#xff0c;我们的监控到dev环境的该接口偶尔请求耗时很长&#xff0c;且抛异…