leetcode-160

197 阅读1分钟

题目描述:具体描述见原题。简单来说就是判断两个链表是否有交点并返回。

解题思路:如果两个链表等长,那么从头遍历就可以。如果两个链表不等长,可以先遍历较长链表,直到等长位置,也可以构造等长:将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)构造等长链表。突然想起来这是去年面飞书第一道算法,当时求了两次链表长,被无情嘲讽。(今天楼下等电梯的姐姐也太好看了吧嘿嘿嘿嘿)