160. 相交鏈表
編寫一個(gè)程序,找到兩個(gè)單鏈表相交的起始節(jié)點(diǎn)。
如下面的兩個(gè)鏈表:
image.png
在節(jié)點(diǎn) 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é)點(diǎn)的值為 8 (注意,如果兩個(gè)列表相交則不能為 0)。從各自的表頭開始算起,鏈表 A 為 [4,1,8,4,5],鏈表 B 為 [5,0,1,8,4,5]。在 A 中,相交節(jié)點(diǎn)前有 2 個(gè)節(jié)點(diǎn);在 B 中,相交節(jié)點(diǎn)前有 3 個(gè)節(jié)點(diǎn)。
/**
* 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
}