传送门
牛客面试笔试必刷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,0dump,temp:=pHead1,pHead2for dump!=nil{dump=dump.Nextl1++}for temp!=nil{temp=temp.Nextl2++}var fast,slow *ListNodeif 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.Nextslow=slow.Next}else{break}}return slow
}
总结:
这题依旧是一道链表题,但是它很好的体现双指针思想的引用,大家可以简单的思考一下,用这道题来作为双指针算法的练手题