【题目】
【代码】
【Python】
【方法1:set】
class Solution:
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
s=set()
while headA:
s.add(headA)
headA=headA.next
while headB:
if headB in s:
return headB
headB=headB.next
return None
【方法2:dict】
class Solution:
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
dic=dict()
while headA:
dic[headA]=dic.setdefault(headA,0)+1
headA=headA.next
while headB:
if dic.setdefault(headB,0):
return headB
headB=headB.next
return None
【方法3】
class Solution:
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
L_A,L_B=0,0
t=headA
while t:
L_A+=1
t=t.next
t=headB
while t:
L_B+=1
t=t.next
diff=abs(L_A-L_B)
if L_A<L_B:
t=headA
headA=headB
headB=t
while diff:
diff-=1
headA=headA.next
while headA:
if headA==headB:
return headA
headA=headA.next
headB=headB.next
return None
【方法4:两条通路】
class Solution:
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
ha,hb=headA,headB
while ha!=hb:
ha=headB if ha is None else ha.next
hb=headA if hb is None else hb.next
return hb