题解——相交链表(力扣160 easy)

160. 相交链表

算法思路

  1. 核心思想

    • 使用两个指针 pApB,分别从 headAheadB 开始遍历。
    • pA 遍历到链表 A 的末尾时,跳转到链表 B 的头节点;当 pB 遍历到链表 B 的末尾时,跳转到链表 A 的头节点。
    • 如果两个链表相交,pApB 最终会在相交节点相遇;如果不相交,pApB 会同时到达 None
  2. 具体步骤

    • 初始化 pA = headApB = headB
    • pA != pB 时:
      • 如果 pA 为空,跳转到 headB;否则继续遍历 pA.next
      • 如果 pB 为空,跳转到 headA;否则继续遍历 pB.next
    • 返回 pA(即相交节点)。
  3. 关键点

    • 通过跳转指针的方式,确保两个指针遍历的总长度相同。
    • 时间复杂度为 O(m + n),空间复杂度为 O(1)
python 复制代码
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def getIntersectionNode(self, headA, headB):
        if not headA or not headB:
            return None
        
        pA, pB = headA, headB
        while pA != pB:
            pA = headB if not pA else pA.next
            pB = headA if not pB else pB.next
        
        return pA

题解里看到的图解,很清晰

相关推荐
wuqingshun31415918 小时前
蓝桥杯 缺页异常2【算法赛】
算法·职场和发展·蓝桥杯
Mh_ithrha18 小时前
题目:小鱼比可爱(java)
java·开发语言·算法
l1t18 小时前
数独优化求解C库tdoku-lib的使用
c语言·开发语言·python·算法·数独
有一个好名字18 小时前
力扣-奇偶链表
算法·leetcode·链表
wxm63118 小时前
力扣算法题(C++):1、2
java·算法·leetcode
im_AMBER18 小时前
Leetcode 103 反转链表 II
数据结构·c++·笔记·学习·算法·leetcode
rgeshfgreh18 小时前
回溯算法精解:排列、子集与组合
python·算法·深度优先
Ka1Yan18 小时前
[链表] - 代码随想录 24. 两两交换链表中的节点
数据结构·链表
rit843249918 小时前
有限元算法求解铁木辛柯梁梁静力问题实例
算法
智驱力人工智能18 小时前
矿山皮带锚杆等异物识别 从事故预防到智慧矿山的工程实践 锚杆检测 矿山皮带铁丝异物AI预警系统 工厂皮带木桩异物实时预警技术
人工智能·算法·安全·yolo·目标检测·计算机视觉·边缘计算