Skip to content

Latest commit

 

History

History
42 lines (42 loc) · 876 Bytes

面试题0207链表相交.md

File metadata and controls

42 lines (42 loc) · 876 Bytes
/**
 * 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
}