题目描述:具体描述见原题。简单来说就是判断两个链表是否有交点并返回。
解题思路:如果两个链表等长,那么从头遍历就可以。如果两个链表不等长,可以先遍历较长链表,直到等长位置,也可以构造等长:将A链表放置B链表后,将B链表放置A链表后,len(A) + len(B) = len(B) + len(A),具体过程见代码。
具体代码:
func getIntersectionNode(headA, headB *ListNode) *ListNode {
if headA == nil || headB == nil {
return nil
}
a, b := headA, headB
for a != b {
if a == nil {
a = headB
} else {
a = a.Next
}
if b == nil {
b = headA
} else {
b = b.Next
}
}
return b
}
补充说明:等长思路其实也很常用,在日常开发中我个人更倾向利用len(A) + len(b) = len(b) + len(A)构造等长链表。突然想起来这是去年面飞书第一道算法,当时求了两次链表长,被无情嘲讽。(今天楼下等电梯的姐姐也太好看了吧嘿嘿嘿嘿)