160. 相交鏈表
編寫一個程序讽营,找到兩個單鏈表相交的起始節(jié)點。
如下面的兩個鏈表:
image.png
在節(jié)點 c1 開始相交汇荐。
示例 1:
image.png
輸入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3
輸出:Reference of the node with value = 8
輸入解釋:相交節(jié)點的值為 8 (注意幅虑,如果兩個列表相交則不能為 0)。從各自的表頭開始算起惯吕,鏈表 A 為 [4,1,8,4,5],鏈表 B 為 [5,0,1,8,4,5]怕午。在 A 中废登,相交節(jié)點前有 2 個節(jié)點;在 B 中郁惜,相交節(jié)點前有 3 個節(jié)點堡距。
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func getIntersectionNode(headA, headB *ListNode) *ListNode {
var listal, listbl int
headA2, headB2 := headA, headB
for headA2 != nil {
listal++
headA2 = headA2.Next
}
for headB2 != nil {
listbl++
headB2 = headB2.Next
}
if listal > listbl {
for i := 1; i <= listal-listbl; i++ {
headA = headA.Next
}
} else if listal < listbl {
for i := 1; i <= listbl-listal; i++ {
headB = headB.Next
}
}
for headA != nil && headB != nil {
if headA == headB {
return headA
}
headA = headA.Next
headB = headB.Next
}
return nil
}