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
转载请标明出处:python 刷 leetcode 题目(33)
文章来源: python 刷 leetcode 题目(33)