力扣刷题【3】相交链表

翻译一下:

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

假设:

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

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

指针移动过程:

  1. pA = a1, pB = b1

  2. 一步步走,pAa2pBb2

  3. pAc1pBb3

  4. pAc2pBc1(还没相等)

  5. pAc3pBc2

  6. pAnullpBc3

  7. pA 跳到 headBb1),pBnull

  8. pAb2pB 跳到 headAa1

  9. pAb3pBa2

  10. pAc1pBc1相遇,返回 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;
    }
}
相关推荐
VL——MOESR26 分钟前
【LuoguP1967】货车运输【生成树】【倍增】
c++·算法·题解·倍增·生成树
手写码匠28 分钟前
华为云Flexus+DeepSeek征文|Agent 记忆系统实战:用 DeepSeek-R1/V3 + Dify 会话变量打造跨会话长期记忆
人工智能·深度学习·算法·aigc
Olafur_zbj1 小时前
【AI】CUDA编程中的维度
人工智能·算法
坚持编程的菜鸟1 小时前
模拟实现memcpy
c语言·算法·模拟实现my_memcpy
wabs6662 小时前
关于图论【最短路径之Bellman_ford 算法|卡码网94.城市间货物运输的思考】
数据结构·算法·图论·卡码网·bellman_ford·求最短路径
MrZhao4002 小时前
On-Policy Distillation(OPD):为什么大模型后训练要在学生自己的轨迹上蒸馏?
算法
朱峥嵘(朱髯)2 小时前
数据库如何根据全表 NDV 估算子集的 NDV
数据库·算法
jjjava2.02 小时前
牛客算法题(第四期)
算法
雪碧聊技术2 小时前
力扣 回溯法 | LCR 020. 回文子串
javascript·算法·leetcode
wabs6662 小时前
关于哈希表【力扣454.四数相加II的思考】
数据结构·算法·leetcode·散列表