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.
Credits:
Special thanks to @stellari for adding this problem and creating all test cases.
class Solution(object):
def getIntersectionNode(self, headA, headB):
"""
:type head1, head1: ListNode
:rtype: ListNode
"""
if headA is None or headB is None:
return None
la,lb = 0,0
starta,startb = headA,headB
while starta:
la += 1
starta = starta.next
while startb:
lb += 1
startb = startb.next
if lb>la:
temp = headB
headB = headA
headA = temp
temp = lb
lb = la
la = temp
while la>lb:
headA = headA.next
la -= 1
for i in range(lb):
if headA==headB:
return headA
headB = headB.next
headA = headA.next
return None