题目
编写一个程序,找到两个单链表相交的起始节点。
例如,下面的两个链表:
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
"""
len1 = 0
len2 = 0
n1 = ListNode(0)
n2 = ListNode(0)
n1 = headA
n2 = headB
while n1 != None:
len1 += 1
n1 = n1.next
while n2 != None:
len2 += 1
n2 = n2.next
if len1 == 0 or len2 == 0:
return None
n1 = headA
n2 = headB
if len1>=len2:
for i in range(len1-len2):
n1 = n1.next
for i in range(len2):
if n1.val == n2.val:
return n1
else:
n1 = n1.next
n2 = n2.next
if len2>len1:
for i in range(len2-len1):
n2 = n2.next
for i in range(len1):
if n1.val == n2.val:
return n1
else:
n1 = n1.next
n2 = n2.next
return None