/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func getIntersectionNode(headA, headB *ListNode) *ListNode {
lenA, lastA, lenB, lastB := 0, 0, 0, 0
p1 := headA
for p1 != nil {
lenA++
lastA = p1.Val
p1 = p1.Next
}
p2 := headB
for p2 != nil {
lenB++
lastB = p2.Val
p2 = p2.Next
}
if lastA != lastB {
return nil
}
if lenA > lenB {
headA, headB = headB, headA
lenA, lenB = lenB, lenA
}
p1, p2 = headA, headB
count := lenB - lenA
for count > 0 {
count--
p2 = p2.Next
}
for p1 != p2 {
p1 = p1.Next
p2 = p2.Next
}
return p1
}