解题思路:
首先,定义两个指针 headA,headB
1.指针A遍历完自己的链表,经过a个节点;再遍历另一个链表走到首个公共节点后,经过b-c个节点; 指针A共经过 a+b-c个节点;
2.指针B遍历完自己的链表,经过b个节点;再遍历另一个链表走到首个公共节点后,经过a-c个节点; 指针A共经过 a+b-c个节点;
此时两个指针相遇就是首个公共节点;
若两个链表不相交,最终都为null;
代码:
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode A=headA;
ListNode B=headB;
//然后不断移动指针
while(A!=B){
A= A!=null ?A.next:headB;
B= B!=null ?B.next:headA;
}
return A;
}
}
具体的题解可以看leedcode上这位大神: