牛客面试笔试必刷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;ifast=fast.Next } for fast!=nil{ if fast!=slow{ fast=fast.Next slow=slow.Next }else{ break } } return slow }
这题依旧是一道链表题,但是它很好的体现双指针思想的引用,大家可以简单的思考一下,用这道题来作为双指针算法的练手题