160.E 相交链表

Problem: 160. 相交链表arrow-up-right

思路

思路1:先分别计算两个链表的长度,如果长度不相等,那就让比较长的先走几步,直到两个链表长度相等。然后两个指针同步往后遍历链表,直到找到第一个相等的节点为止。

思路2:用两个新指针pApB先分别指向A和B的表头,在两个指针不相等的情况下,两个指针一起变化:

  • 如果pA不为空,则指向pA的下一个节点,否则让pA指向B的表头

  • 如果pB不为空,则指向pB的下一个节点,否则让pB指向A的表头pA==pB时,则找到了交点,或者两个链表都走到了表尾。

Code

代码1:

func getIntersectionNode(headA, headB *ListNode) *ListNode {
	lenA, lenB := 0, 0
	for p := headA; p != nil; p = p.Next {
		lenA++
	}

	for p := headB; p != nil; p = p.Next {
		lenB++
	}

	if lenA > lenB {
		for lenA > lenB {
			headA = headA.Next
			lenA--
		}
	}

	if lenB > lenA {
		for lenB > lenA {
			headB = headB.Next
			lenB--
		}
	}

	for headA != nil {
		if headA == headB {
			return headA
		}
		headA = headA.Next
		headB = headB.Next
	}

	return nil
}

代码2:

Last updated