leetcode 160. 교차 링크 golang 구현

묘사 하 다.
      ,              。
          ,   null.
      ,             。
              。
       O(n)      ,    O(1)   

사고의 방향
                  m n  m > n :
    m       m -n                          


이루어지다
/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func getIntersectionNode(headA, headB *ListNode) *ListNode {
    if headA == nil || headB == nil{
        return nil
    }
    aLen := 0
    bLen := 0

    curNodeA := headA
    curNodeB := headB

    //          
    for curNodeA != nil || curNodeB != nil{
        if curNodeA != nil{
            aLen++
            curNodeA = curNodeA.Next
        }

        if curNodeB != nil{
            bLen++
            curNodeB = curNodeB.Next
        }
    }

    //         
    curNodeA = headA
    curNodeB = headB
    var cross *ListNode
    if aLen > bLen{
        for i := 0; i < aLen - bLen; i++{
            curNodeA = curNodeA.Next
        }
    }else{
        for i := 0; i < bLen - aLen; i++{
            curNodeB = curNodeB.Next
        } 
    }

    //         
    for curNodeB != nil && curNodeA != nil{
        if curNodeA == curNodeB{
            cross = curNodeB
            break
        }

        curNodeB = curNodeB.Next
        curNodeA = curNodeA.Next
    }

    return cross
    
}

좋은 웹페이지 즐겨찾기