相交链表(力扣160题)
/**
* 题目:给你两个单链表的头节点 headA 和 headB ,
* 请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null
*
* 思路:本题可以使用Hashset存贮A链表中的每一个节点,然后再和B中的每一个对比即可,不过需要创建额外的空间。
* 也可使用双指针的方法,两个指针分别同时从两个链表前进,由于两个链表长度可能不相等,可能无法同时到达公共节点。
* 所以我们可以通过某些方法将两个链表关联在一起,即:p1指针遍历A链表以后再遍历B链表,p2指针遍历完B链表以后再遍历A链表,这样逻辑上就是一条链了。
*/
class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode p1 = headA;
ListNode p2 = headB;
while (p1 != p2) {
p1 = p1 == null ? headB : p1.next;
p2 = p2 == null ? headA : p2.next;
}
return p1;
}
}