题目:给你两个单链表的头节点headA和 headB,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null。
https://leetcode.cn/problems/intersection-of-two-linked-lists/description/?envType=problem-list-v2&envId=2cktkvj
题解:一开始并没有看懂这道题是什么意思。通过查看提示才逐渐明白题意。如果 listA 和 listB有交点,则X=listA[skipA]=listB[skipB]。我们可以通过循环遍历来得到相交节点。
X是相交的值。
skipA和skipB分别代表着各个链表从头结点到相交节点需要走几步。
list[ ]数组则存储着链表的值。
示例:A链表为4,1,8,4,5;B链表为5,0,1,8,4,5;
则X=8.而不是1.因为他们节点所在内存位置并不相同.
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode A = headA, B = headB;
while (A != B) {
// 如果 A 当前不为空,则将 A 移动到下一个节点
// 否则 A 到达了链表 A 的末尾,切换到链表 B 的头节点
if (A != null) A = A.next;
else A = headB;
// 如果 B 当前不为空,则将 B 移动到下一个节点
// 否则 B 到达了链表 B 的末尾,切换到链表 A 的头节点
if (B != null) B = B.next;
else B = headA;
}
return A;
}
}
当A链表循环一遍到达相交点时B链表也同时到达相交点。此为结果。当不相交时,则结果为null。