/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func getIntersectionNode(headA, headB *ListNode) *ListNode {
lenA, lenB := 0, 0
curA, curB := headA, headB
// 遍历计算两个链表的长度
for curA != nil {
lenA++
curA = curA.Next
}
for curB != nil {
lenB++
curB = curB.Next
}
curA, curB = headA, headB
// 默认A为较长表,如不是则交换至A
if lenB > lenA {
lenA, lenB = lenB, lenA
curA, curB = curB, curA
}
diff := lenA - lenB
// 同步指针至短链表的起始点
for diff > 0 {
curA = curA.Next
diff--
}
for curA != nil {
if curA == curB {
return curA
}
curA = curA.Next
curB = curB.Next
}
return nil
}