云计算百科
云计算领域专业知识百科平台

相交链表(力扣160 easy)

 160. 相交链表

算法思路

  • 核心思想:

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

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

    • 通过跳转指针的方式,确保两个指针遍历的总长度相同。
    • 时间复杂度为 O(m + n),空间复杂度为 O(1)。
  • # 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

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

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 相交链表(力扣160 easy)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!