leetcode之Intersection of Two Linked Lists

来源:互联网 发布:diy手机墙纸软件 编辑:程序博客网 时间:2024/05/14 02:26
这道题据说是个经典题啦,可惜我这种半路出身的一开始还真是没想到。解题思路是先算出来2个列表的长度,相减就是长的多出来的部分。然后切掉,然后2边一起开始走,如果是有连接点,则一定能相遇,否则走到尾没相遇的话就返回None。代码如下:
# Definition for singly-linked list.# class ListNode(object):#     def __init__(self, x):#         self.val = x#         self.next = Noneclass 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

0 0
原创粉丝点击