leetcood学习笔记-160*-相交链表

题目描述:

方法一:

class Solution(object):
    def getIntersectionNode(self, headA, headB):
        """
        :type head1, head1: ListNode
        :rtype: ListNode
        """
        a,b = headA,headB
        a_num,b_num = 0,0
        while a:
            a = a.next
            a_num += 1
        while b:
            b = b.next
            b_num += 1
        if a_num >= b_num:
            gap = a_num - b_num
            while gap:
                headA = headA.next
                gap -= 1
            while headA and headB:
                if headA == headB:
                    return headA
                headA = headA.next
                headB = headB.next
            return
        else:
            gap = b_num - a_num
            while gap:
                headB = headB.next
                gap -=1
            while headA and headB:
                if headA == headB:
                    return headA
                headA = headA.next
                headB = headB.next
            return
        

优化后:

class Solution(object):
    def getIntersectionNode(self, headA, headB):
        """
        :type head1, head1: ListNode
        :rtype: ListNode
        """
        a,b = 0,0
        p,q = headA,headB
        while headA and headB:
            headA,headB = headA.next,headB.next
            a,b = a+1,b+1
        while headA:
            headA,p = headA.next,p.next
        while headB:
            headB,q = headB.next,q.next
        while p:
            if p==q:
                return p
            p,q = p.next,q.next
           
        return

方法二;指针追逐*

class Solution(object):
    def getIntersectionNode(self, headA, headB):
        """
        :type head1, head1: ListNode
        :rtype: ListNode
        """
        if not headA or not headB:
            return 
        p,q = headA,headB
        while p!=q:
            p = p.next if p else headB
            q = q.next if q else headA
        return p   

 

posted @ 2019-03-18 20:35  oldby  阅读(199)  评论(0编辑  收藏  举报