This fast solution aligns the two linked list at their ends, and compares node references starting from the nth node from the last, n being the length of the shorter list. Any comments are greatly appreciated.

```
class Solution(object):
def getIntersectionNode(self, headA, headB):
if not headA or not headB:
return None
a = self.countLen(headA)
b = self.countLen(headB)
if a < b:
a,b = b,a
headA,headB = headB,headA
while a > b:
headA = headA.next
a -= 1
while headA:
if headA == headB:
return headA
headA = headA.next
headB = headB.next
return None
def countLen(self, head):
n = 0
while head:
head = head.next
n += 1
return n
```