1、散列表查找
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
# 存储节点对比 时间O(n+m)python内部使用hash值 作为key,时间复杂度可以做到O(1) 空间O(n)
memA = set()
while headA:
memA.add(headA)
headA = headA.next
while headB:
if headB in memA:
return headB
headB = headB.next
return None
2、双指针
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
# 遍历长度:curA:size(A) + size(B) curB:size(B)+size(A) 如果没有交点则None相遇,有交点则交点相遇
curA = headA
curB = headB
while curA!=curB:
if not curA:
curA = headB
else:
curA = curA.next
if not curB:
curB = headA
else:
curB = curB.next
return curA