zoukankan      html  css  js  c++  java
  • 160. Intersection of Two Linked Lists

    Write a program to find the node at which the intersection of two singly linked lists begins.

    For example, the following two linked lists:

    A:          a1 → a2
                       ↘
                         c1 → c2 → c3
                       ↗            
    B:     b1 → b2 → b3
    

    begin to intersect at node c1.

    Notes:

      • If the two linked lists have no intersection at all, return null.
      • The linked lists must retain their original structure after the function returns.
      • You may assume there are no cycles anywhere in the entire linked structure.
      • Your code should preferably run in O(n) time and use only O(1) memory.

    解法:

    1.p1遍历链表A,p2遍历链表B

    2.如果p1 到达了链表尾部p1开始遍历链表B

    3.如果p2 到达了链表尾部,p2开始遍历链表A

    4.如果p1 == p2 则找到了分叉点

    代码:

    class Solution(object):
        def getIntersectionNode(self, headA, headB):
            """
            :type head1, head1: ListNode
            :rtype: ListNode
            """
            if headA ==None or headB ==None:
                return None
            p1=headA
            p2=headB
            while p1 is not p2:
                p1 = p1.next
                p2 = p2.next
                if p1 is p2:
                    return p1
                if p1 is None:
                    p1 = headB
                if p2 is None:
                    p2 = headA
            return p1
  • 相关阅读:
    对白
    泰芒了
    下雨
    聚会
    周末了
    One English Sentence
    Struts拦截器使用
    JAVA语法题
    jquery全选框的实现
    实战3--设计实体, 映射实体
  • 原文地址:https://www.cnblogs.com/feiqiangs/p/5798809.html
Copyright © 2011-2022 走看看