LeetCode 热题 160.相交链表(双指针)

题目

思路:

我们可以用双指针,i 指向a的头,j 指向b的头,然后一个个比较然后不同就往下走,但是这里有个问题,就是可能不同步,i 和 j 经过相交节点的时间可能不同。

我们把

链 A 分为两段:不相交的 a 部分 + 相交的 c 部分

链 B 分为两段:不相交的 b 部分 + 相交的 c 部分

让 i 和 j 分别走 A + B 和 B + A,把路程差补平,我们可以发现:

i 走的路程是 a + c + b + c

j 走的路程是 b + c + a + c

前面的 a + c + b = b + c + a,那么不管 a 和 b 等不等,如果AB相交 i 和 j 总能在某一时刻同时指向相交的点,并且如果没有相交的点,他们也同时指向空。这样代码就很好写了:

复制代码
		if (headA == nullptr || headB == nullptr) return nullptr;  // 只要有一条链表为空,就不可能相交

        ListNode *i = headA, *j = headB;
		//双指针各走 自己的路 + 对方的路,总长度相同,保证同步到达可能的交点
        while (i != j ){
            if(i == nullptr) i = headB;  // 自己的走完了,走对方的
            else i = i -> next;  // 往下走

            if (j == nullptr) j = headA; // 自己的走完了
            else j = j -> next;  // 往下走
        }

        return i;  // 如果相交 同时指向相交的点,不相交,同时指向空,所以直接返回 i 就行
相关推荐
VALENIAN瓦伦尼安教学设备5 分钟前
ASHOOTER激光对中仪如何通过颜色确定调整是否合适
数据库·嵌入式硬件·算法
货拉拉技术6 分钟前
重塑 Agent 度量衡:基于 LLM-as-a-Judge 的离线评估体系与实践
算法·设计模式
车压19 分钟前
从“为什么”理解注意力机制
算法
wabs66632 分钟前
关于哈希表【力扣15.三数之和的思考】
数据结构·算法·leetcode·散列表·哈希表·三数之和
退休倒计时38 分钟前
【每日一题】LeetCode 88. 合并两个有序数组 TypeScript
算法·leetcode·职场和发展·typescript
键盘会跳舞44 分钟前
C++:函数对象与 std::function 源码级深度拆解——泛型算法的策略内核与可调用对象统一封装
c++·算法·仿函数
手写码匠1 小时前
华为云Flexus+DeepSeek征文|Agent 评测体系实战:用 DeepSeek-R1 当裁判,打造 Dify Agent 的自动化回归测试流水线
人工智能·深度学习·算法·aigc
LONGZETECH1 小时前
无人机实训高成本痛点解法:虚拟仿真实现 70% 耗材损耗下降
大数据·算法·unity·架构·无人机
不会就选b1 小时前
算法日常・每日刷题--<队列,宽搜>4
算法
(Charon)1 小时前
【C++】线程安全队列(三):MPSC无锁队列、atomic与链表节点实现
c++·安全·链表