美文网首页
[leetcode]160. Intersection of T

[leetcode]160. Intersection of T

作者: SQUA2E | 来源:发表于2019-07-27 20:30 被阅读0次

    题目

    Write a program to find the node at which the intersection of two singly linked lists begins.
    For example, the following two linked lists:

    begin to intersect at node c1.

    分析

    这个题目目的是找到两个单链表的交叉点,如果没有交叉点那么返回null
    一般思路是遍历两个单链表一个个对比,但是这样复杂度非常高。讨巧的方法类似于第141题, 把两个单链表想象成环。


    A 指针从 链表 headA 开始遍历,当到达最后一个节点时,再把A指向HeadB;
    B 指针从 链表 headB 开始遍历,当到达最后一个节点时,再把B指向HeadA;
    这样,对于不同长度的两个链表,假如他们是相交的,总能找到交点使得A == B。

    再看不相交的情况。


    当链表长度不同时,且A 和 B的下一个节点同时为空时,说明两个链表已经分别被A,B指针遍历过一次,至此还没有交点,说明两者不相交。

    代码

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

    相关文章

      网友评论

          本文标题:[leetcode]160. Intersection of T

          本文链接:https://www.haomeiwen.com/subject/vffyrctx.html