Go语言每日一练——链表篇(八)

慈云数据 2024-03-15 技术支持 55 0

传送门

牛客面试笔试必刷101题 ----------------两个链表的第一个公共结点

题目以及解析

题目

在这里插入图片描述

解题代码及解析

解析

这一道题使用的还是双指针算法,我们先求出两个链表的长度差n,然后定义快慢指针,让快指针先走n步,最后快慢指针在同一点,该店就是我们的目标点

代码

package main
IMPort( 
    . "nc_tools"
)
/*
 * type listNode struct{
 *   Val int
 *   Next *ListNode
 * }
 */
/**
 * 
 * @param pHead1 ListNode类 
 * @param pHead2 ListNode类 
 * @return ListNode类
*/
func abs(a,b int) int{
    if a>;b{
        return a-b
    }else{
        return b-a
    }
}
func FindFirstCommonNode( pHead1 *ListNode ,  pHead2 *ListNode ) *ListNode {
    l1,l2:=0,0
    dump,temp:=pHead1,pHead2
    for dump!=nil{
        dump=dump.Next
        l1++
    }
    for temp!=nil{
        temp=temp.Next
        l2++
    }
    var fast,slow *ListNode
    if l1>l2{
        fast,slow=pHead1,pHead2
    }else{
         fast,slow=pHead1,pHead2
    }
    for i:=0;i
        fast=fast.Next
    }
    for fast!=nil{
        if fast!=slow{
            fast=fast.Next
            slow=slow.Next
        }else{
            break
        }
    }
    return slow
}
微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon