其核心思想就是:若两个指针所走的总长度相同,则必然能够并排同时到达终点。 所以使用两个指针pA和pB分别指向链表A、B,若第一趟就能够相交最好不过。否则一旦pA走到底就从B链表开始走,pB走到底就从A链表开始走。这样pA和pB所走的总路径长度都是A、B两个链表长度和,故第二趟时,两个指针必然能够同时到达终点。
/**
* 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) {
ListNode A=headA,B=headB;
if(A==null||B==null){
return null;
}
while(A!=B){
A=(A==null?headB:A.next);
B=(B==null?headA:B.next);
}
return A;
}
}