luoheng
10/29/2019 - 3:21 AM

getIntersectionNode

/**
 * 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
}