160. 相交链表

题目:

编写一个程序,找到两个单链表相交的起始节点。

思路:

获得两个链表长度

长的那个进行缩短

而后两个同时取下一个,相等的节点即为相交节点

2.思路与上一个相同,但不借助额外计数器,两个链表同时遍历,当一个结束时,结束的链表指向未结束链表头部,再次遍历。当长链表遍历结束后,长短链表长度相同。指向末尾的指针遍历另一个。相等时结束

3.将其中一个链表的首尾相连,将问题变为是否有环,且环入口的问题

1.

    def getIntersectionNode(self, headA, headB):
        """
        :type head1, head1: ListNode
        :rtype: ListNode
        """
        la = 0
        lb = 0
        a = headA
        b = headB
        while a or b:
            if a :
                a= a.next
                la +=1
            if b:
                b = b.next
                lb += 1
                
        b = headB
        a = headA
        while b:
            if a==b:
                return a
            
            if la > lb:
                la -= 1
                a = a.next
            elif lb > la:
                lb -= 1
                b = b.next
            else:
                la -= 1
                lb -= 1
                a = a.next
                b = b.next
                        
        return None
                

2.

    def getIntersectionNode(self, headA, headB):
        """
        :type head1, head1: ListNode
        :rtype: ListNode
        """

        a = headA
        b = headB
        while a!=b:
            a = a.next if a else headB
            b = b.next if b else headA             
        return a

 

 

 

 

你可能感兴趣的:(leetCode)