C++/JavaScript ⭐算法OJ⭐ 链表相交

ops/2025/2/23 8:14:24/

题目 160. Intersection of Two Linked Lists

Given the heads of two singly linked-lists headA and headB, return the node at which the two lists intersect. If the two linked lists have no intersection at all, return null.

For example, the following two linked lists begin to intersect at node c1:
intersection of Two Linked Lists

The test cases are generated such that there are no cycles anywhere in the entire linked structure.

Note that the linked lists must retain their original structure after the function returns.

给定两个单链表的头节点 headAheadB,返回两个链表相交的节点。如果两个链表没有相交,则返回 null

解题思路

双指针法

使用两个指针 pApB 分别从 headAheadB 开始遍历链表。

pA 到达链表末尾时,将其重定向到 headB;当 pB 到达链表末尾时,将其重定向到 headA

如果两个链表相交,pApB 会在相交节点相遇;如果不相交,pApB 会同时到达链表末尾(即 null)。

struct ListNode {int val;ListNode *next;ListNode(int x) : val(x), next(NULL) {}
};class Solution {
public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {if (headA == nullptr || headB == nullptr) return nullptr;ListNode *pA = headA;ListNode *pB = headB;while (pA != pB) {pA = (pA == nullptr) ? headB : pA->next;pB = (pB == nullptr) ? headA : pB->next;}return pA;}
};
javascript">class ListNode {constructor(val) {this.val = val;this.next = null;}
}/*** @param {ListNode} headA* @param {ListNode} headB* @return {ListNode}*/
var getIntersectionNode = function(headA, headB) {if (headA === null || headB === null) return null;let pA = headA;let pB = headB;while (pA !== pB) {pA = (pA === null) ? headB : pA.next;pB = (pB === null) ? headA : pB.next;}return pA;
};

复杂度分析

  • 时间复杂度:O(m + n),其中 mn 分别是两个链表的长度。两个指针最多遍历 m + n 个节点。

  • 空间复杂度:O(1),只使用了常数级别的额外空间。


http://www.ppmy.cn/ops/160716.html

相关文章

如何选择近视泳镜的度数

在选择近视泳镜的度数时,需考虑水下折射原理和实际使用场景,以下是具体原则和注意事项: 一、度数调整的核心原则 由于水的折射率(≈1.33)与空气不同,水下物体会显得比实际更近、更大。因此,泳镜…

Redis实战篇《黑马点评》5

5.秒杀优化 5.1异步秒杀思路 我们先来回顾一下下单流程 当用户发起请求,此时会先请求Nginx,Nginx反向代理到Tomcat,而Tomcat中的程序,会进行串行操作,分为如下几个步骤 查询优惠券判断秒杀库存是否足够查询订单校验是…

短视频脚本文案策划 总结

1、旁白:第三人称视角,依靠浑厚的声音奠定影片的基调(企业宣传片主要手法和元素)(容易不接地气)(要有故事感的旁白) 2、独白:第一人称视角,主角或其他视角的内…

ubuntu新系统使用指南

1. 更新源 2. 配置rime 输入法 3. 下载常用工具 deepin-log-viewer 功能:Deepin 日志查看器。 用途:用于查看系统日志、应用程序日志等,帮助用户排查问题。 deepin-movie 功能:Deepin 视频播放器。 用途:用于播…

以ChatGPT为例解析大模型背后的技术

目录 1、大模型分类 2、为什么自然语言处理可计算? 2.1、One-hot分类编码(传统词表示方法) 2.2、词向量 3、Transformer架构 3.1、何为注意力机制? 3.2、注意力机制在 Transformer 模型中有何意义? 3.3、位置编…

柠檬水找零(力扣860)

这道题的贪心很简单,就是体现在对于20元的找零上。根据题意,20元有两种找零方式:1.找一张5元和一张10元;2.找3张5元。但是5元比较万能,因为无论是10还是20都需要用5元来找零,所以我们优先考虑第一种找零方式…

【护网行动-红蓝攻防】第一章-红蓝对抗基础 认识红蓝紫

1.实战攻防演练 1.1为什么要进行实战攻防演练? 军事上的演练,是除了实战以外最能检验军队战斗力的一种考核方式,他可以模拟面对外部势力的攻击时候,如何更好的去维护国家和主权的安全。同样的,在网络上面,…

windwos与linux环境下Iperf3带宽测试工具的安装、使用

目录 一、前言 二、windows 2.1下载 2.2安装 2.3使用 2.3.1服务端 2.3.2客户端 2.3.3输出内容 1.客户端 2.服务端 2.4.相关命令 三、linux 3.1安装 3.2使用 1.服务端 2.客户端 3.输出内容 1.客户端 2.服务端 一、前言 在数字化浪潮下,网络性能…