您的位置:首页 > 编程语言 > Python开发

leetcode之Intersection of Two Linked Lists

2016-01-08 15:31 477 查看
这道题据说是个经典题啦,可惜我这种半路出身的一开始还真是没想到。解题思路是先算出来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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息