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 就行
相关推荐
历程里程碑2 分钟前
滑动窗口------滑动窗口最大值
大数据·python·算法·elasticsearch·搜索引擎·flask·tornado
Mr_Xuhhh2 分钟前
C语言字符串与内存操作函数模拟实现详解
java·linux·算法
B站_计算机毕业设计之家5 分钟前
AI大模型:Deepseek美食推荐系统 机器学习 协同过滤推荐算法+可视化 Django框架 大数据毕业设计(源码)✅
python·算法·机器学习·数据分析·django·推荐算法·美食
小草cys6 分钟前
基于大模型的图像目标检测及跟踪算法
人工智能·算法·目标检测
代码游侠18 分钟前
C语言核心概念复习(三)
开发语言·数据结构·c++·笔记·学习·算法
池央25 分钟前
贪心算法-递增的三页子序列
算法·贪心算法
lrh12280025 分钟前
详解K近邻(KNN)算法:原理、实现与优化
算法·机器学习
程途拾光15833 分钟前
算法公平性:消除偏见与歧视的技术探索
大数据·人工智能·算法
秋风战士35 分钟前
无线通信算法之340:信道均衡除法定标讨论
算法·fpga开发·信息与通信
沧澜sincerely37 分钟前
蓝桥杯算法练习
算法·职场和发展·蓝桥杯