python 刷 leetcode 题目(33)

匿名 (未验证) 提交于 2019-12-02 22:54:36

160相交链表

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

例如,下面的两个链表

A:          a1  a2                                          c1  c2  c3                                 B:     b1  b2  b3

在节点 c1 开始相交。

注意:

  • 如果两个链表没有交点,返回 null.
  • 在返回结果后,两个链表仍须保持原有的结构。
  • 可假定整个链表结构中没有循环。
  • 程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。

 思路:其实就是暴力解决,找出他们共同部分,判断这一段是否相同。

代码如下:

# Definition for singly-linked list. # class ListNode(object): #     def __init__(self, x): #         self.val = x #         self.next = None  class Solution(object):     def getIntersectionNode(self, headA, headB):         """         :type head1, head1: ListNode         :rtype: ListNode         """         #### the first method  #         if headA == None or headB == None: #             return None #         def get_length(head): #             count = 0 #             if head == None: #                 return count #             else: #                 while(head): #                     head = head.next #                     count += 1 #             return count #         headA_len = get_length(headA) #         headB_len = get_length(headB)          #         if headA_len >= headB_len: #             for i in range(headA_len - headB_len): #                 headA= headA.next #         else: #             for i in range(headB_len - headA_len): #                 headB = headB.next #         min_len = min(headA_len, headB_len) #         for i in range(min_len): #             if headA == headB: #                 return headA #             else: #                 headA= headA.next #                 headB= headB.next #         return None                  #### the second method         p1 = headA          p2 = headB         while(p1 != p2):             p1 = headB if p1 == None else  p1.next             p2 = headA if p2 == None else  p2.next               return p1                  

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!