Go语言每日一练——链表篇(八)
传送门
牛客面试笔试必刷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<abs(l1,l2);i++{
fast=fast.Next
}
for fast!=nil{
if fast!=slow{
fast=fast.Next
slow=slow.Next
}else{
break
}
}
return slow
}
总结:
这题依旧是一道链表题,但是它很好的体现双指针思想的引用,大家可以简单的思考一下,用这道题来作为双指针算法的练手题