给你两个单链表的头节点 headA
和 headB
,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null
。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
if(headA==null || headB==null)
return null;
ListNode pA=headA,pB=headB;
// 若相交,链表A: a+c, 链表B : b+c. a+c+b+c = b+c+a+c 。
// 则会在公共处c起点相遇。若不相交,a+b = b+a 。因此相遇处是NULL
// 空间复杂度 O(1) 时间复杂度为 O(n)
while(pA!=pB){
pA= pA==null?headB:pA.next;
pB= pB==null?headA:pB.next;
}
return pA;
}
}