052_相交链表

知识点:链表

LeetCode第一百六十题:https://leetcode-cn.com/problems/intersection-of-two-linked-lists/submissions/

语言:GoLang

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */

 // 题解区大神的优秀代码
func getIntersectionNode(headA, headB *ListNode) *ListNode {
    pA, pB := headA, headB
    
    for pA != pB {
        if pA == nil {
            pA = headB
        } else {
            pA = pA.Next
        }

        if pB == nil {
            pB = headA
        } else {
            pB = pB.Next
        }
    }

    return pA
}


 // 自己想的解法,代码量较多,哈哈
func getIntersectionNode_(headA, headB *ListNode) *ListNode {
    pA, pB := headA, headB
    
    // 找出长度差距
    for pA != nil && pB != nil {
        if pA == pB {
            return pA
        }

        pA = pA.Next
        pB = pB.Next
    }

    // 让较长的那个挪动到长度相同的点
    if pA != nil {
        tmpA := pA
        pA = headA
        for tmpA != nil {
            pA = pA.Next
            tmpA = tmpA.Next
        }
        pB = headB
    }else if pB != nil {
        tmpB := pB
        pB = headB
        for tmpB != nil {
            pB = pB.Next
            tmpB = tmpB.Next
        }
        pA = headA
    }

    // 出发,直到在一起
    for pA != nil && pB != nil {
        if pA == pB {
            return pA
        }

        pA = pA.Next
        pB = pB.Next
    }
    return nil
}
posted @ 2020-04-10 20:38  Cenyol  阅读(109)  评论(0)    收藏  举报