力扣刷题【3】相交链表

翻译一下:

就是两个链表,如果他们相交,他们就共享交点之后的节点,然后要返回第一个相交的点,如果没有相交就返回NULL。
思路:像这种链表相关的题我们一般都可以想想指针,这道题我们可以用双指针。

假设:

  • A:a1 → a2 → c1 → c2 → c3

  • B:b1 → b2 → b3 → c1 → c2 → c3

指针移动过程:

  1. pA = a1, pB = b1

  2. 一步步走,pA 到 a2,pB 到 b2

  3. pA 到 c1,pB 到 b3

  4. pA 到 c2,pB 到 c1(还没相等)

  5. pA 到 c3,pB 到 c2

  6. pA 到 null,pB 到 c3

  7. pA 跳到 headB(b1),pB 到 null

  8. pA 到 b2,pB 跳到 headA(a1)

  9. pA 到 b3,pB 到 a2

  10. pA 到 c1,pB 到 c1 → 相遇,返回 c1

PA走过的总路程是A不相交的点+共享节点+B不相交的节点

PB走的是B不相交的点+共享节点+A不相交的点

如果两个链表相交那最终他们PA和PB一定会相遇并且在第一次相交的点相遇。

代码:

java 复制代码
public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        if(headA == null || headB == null){
            return null;
        }

        ListNode pA = headA;
        ListNode pB = headB;

        //当pa和pb不相交时一直循环
        while(pA!=pB){
            pA = (pA == null) ? headB : pA.next;
            pB = (pB == null) ? headA : pB.next;
        }
        //返回的要么是null两个不相交,要么是交点
        return pA;
    }
}
相关推荐
liliangcsdn1 小时前
现金流指标的探索和分析
大数据·算法
wang09071 小时前
硬着头皮学数据结构和算法之Myers算法
数据结构·算法
蓝悦无人机1 小时前
无人机系列之飞控算法:从PID到AI,飞行控制的核心进化
人工智能·算法·无人机·飞控系统
憨波个1 小时前
【说话人日志】DiariZen
人工智能·深度学习·算法·语音识别
用户7341681035481 小时前
被忽视的输入:为什么变工况故障诊断需要引入控制回路信号?
算法
垆边人似月.2 小时前
华为机试题 :最长递增子序列题目
数据结构·c++·算法·华为
动词ing2 小时前
【题目练习】算法 组合总和
算法
程序员-Benothing2 小时前
Linux文本排序统计命令:sort、uniq、wc、cut、tr实战
java·开发语言·算法
开发者联盟league2 小时前
c++11 使用chrono库转换时间点和字符串,计算时间点间隔
java·c++·算法
老歌老听老掉牙2 小时前
两个平面旋转平移坐标系间的坐标变换关系
python·算法·平面·旋转·平移