题解 | #两个链表的第一个公共结点#
两个链表的第一个公共结点
https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46
package main import . "nc_tools" /* * type ListNode struct{ * Val int * Next *ListNode * } */ /** * * @param pHead1 ListNode类 * @param pHead2 ListNode类 * @return ListNode类 */ func FindFirstCommonNode(pHead1 *ListNode, pHead2 *ListNode) *ListNode { // write code here // 遍历第一个链表,全部指向公共节点。 if pHead1 == nil || pHead2 == nil { return nil } if pHead1 == pHead2 { return pHead1 } // 记录链表1, 2的长度 r1 := getListLength(pHead1) r2 := getListLength(pHead2) diff := 0 // 快慢指针的思想,长的一个先走,遇到相同的就返回 var slow *ListNode var fast *ListNode if r1 > r2 { diff = r1 - r2 fast = pHead1 slow = pHead2 } else { diff = r2 - r1 fast = pHead2 slow = pHead1 } for diff > 0 { fast = fast.Next diff-- } for fast != nil { if fast == slow { return fast } fast = fast.Next slow = slow.Next } return nil } func getListLength(list *ListNode) int { l := 0 tPHead1 := list for tPHead1 != nil { l++ tPHead1 = tPHead1.Next } return l }