美文网首页
160. 相交链表

160. 相交链表

作者: one_zheng | 来源:发表于2020-02-22 19:30 被阅读0次

    160. 相交链表

    编写一个程序,找到两个单链表相交的起始节点。

    如下面的两个链表:


    image.png

    在节点 c1 开始相交。

    示例 1:

    image.png

    输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3
    输出:Reference of the node with value = 8
    输入解释:相交节点的值为 8 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。在 A 中,相交节点前有 2 个节点;在 B 中,相交节点前有 3 个节点。

    /**
     * Definition for singly-linked list.
     * type ListNode struct {
     *     Val int
     *     Next *ListNode
     * }
     */
    func getIntersectionNode(headA, headB *ListNode) *ListNode {
        var listal, listbl int
    
        headA2, headB2 := headA, headB
        for headA2 != nil {
            listal++
            headA2 = headA2.Next
        }
        for headB2 != nil {
            listbl++
            headB2 = headB2.Next
        }
        if listal > listbl {
            for i := 1; i <= listal-listbl; i++ {
                headA = headA.Next
            }
        } else if listal < listbl {
            for i := 1; i <= listbl-listal; i++ {
                headB = headB.Next
            }
        }
        for headA != nil && headB != nil {
            if headA == headB {
                return headA
            }
            headA = headA.Next
            headB = headB.Next
        }
        return nil
    }
    
    

    相关文章

      网友评论

          本文标题:160. 相交链表

          本文链接:https://www.haomeiwen.com/subject/pqkrqhtx.html