面试金典16(Python)—— 链表相交(简单)

链表相交

概述:给你两个单链表的头节点 headA headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。题目数据 保证 整个链式结构中不存在环。

输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3
输出:Intersected at '8'

输入:intersectVal = 2, listA = [0,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1
输出:Intersected at '2'

方法一:双指针

思路:该算法非常巧妙,数学推导就不展开了。核心思想就是,链表的头尾相互连接,循环到相交位置即可。

# 双指针
# 该算法非常巧妙,数学推导就不展开了。
# 核心思想就是,链表的头尾相互连接,循环到相交位置即可。
class Solution:
    def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
        A, B = headA, headB
        while A != B:
            A = A.next if A else headB
            B = B.next if B else headA
        return A

总结

又是一道不会说人话的题!

你可能感兴趣的:(链表,数据结构,python,算法,面试)