LeetCode160.相交链表Golang版
1. 问题描述
编写一个程序,找到两个单链表相交的起始节点。
2. 思路
2.1 思路1
- 两条链表分别走一遍,记录两条链表的长度,算出长度差diff
- 长度较长的链表先走diff步,最终能找到相交的元素
2.2 思路2
- 令
pa, pb = headA, headB
,当pa != pb
,执行循环
1.1. 如果pa != nil
,pa = pa.Next
;否则 pa 指向 headB
1.2. 如果pb != nil
,pb = pb.Next
;否则 pb 指向 headA- 最终,如果两条链表有相交:pa和pb走完两条链表不重合的部分和两条链表重合的部分;如果
两条链表没有相交,pa和pb走完两条链表。所以返回 pa或pb都可。
3. 代码
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func getIntersectionNode(headA, headB *ListNode) *ListNode {
if headA == nil || headB == nil {
return nil
}
pA := headA
pB := headB
for pA != pB {
if pA != nil {
pA = pA.Next
} else {
pA = headB
}
if pB != nil {
pB = pB.Next
} else {
pB = headA
}
}
return pA
}