这道题据说是个经典题啦,可惜我这种半路出身的一开始还真是没想到。解题思路是先算出来2个列表的长度,相减就是长的多出来的部分。然后切掉,然后2边一起开始走,如果是有连接点,则一定能相遇,否则走到尾没相遇的话就返回None。代码如下:
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def getIntersectionNode(self, headA, headB):
"""
:type head1, head1: ListNode
:rtype: ListNode
"""
if not headA:
return None
if not headB:
return None
lenofheadA = 0
lenofheadB = 0
headB1 = headB
headA1 = headA
while headB1:
lenofheadB += 1
headB1 = headB1.next
while headA1:
lenofheadA += 1
headA1 = headA1.next
deviation = abs(lenofheadA - lenofheadB)
if lenofheadA >= lenofheadB:
for i in range(deviation):
headA = headA.next
NumofStep = 0
while NumofStep < lenofheadB:
if headA == headB:
return headB
else:
headB = headB.next
headA = headA.next
NumofStep += 1
else:
return None
else:
for i in range(deviation):
headB = headB.next
NumofStep = 0
while True:
if headA == headB:
return headB
else:
headB = headB.next
headA = headA.next
NumofStep += 1
else:
return None