链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists/
思路:
1.链表判空
2.设置pa从headA开始,设置pb从headB开始
3.pa,pb同时向后移动,直到两者有一个为空则结束,表示无交点
4.在3循环中,如果出现pa相遇pb,则此处为交点
5.pa和pb后移一位
6.如果pa和pb均换路且都到达尾部,则表示无交点
7.在3循环中,如果pa到达尾部,则换路从headB开始后移;如果pb到达尾部,则换路从headA开始后移,注:换路只换一次
8.无交点则返回空
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
//1.
if(headA==null||headB==null){
return null;
}
//2.
ListNode pa=headA;
ListNode pb=headB;
boolean isPaChange=false;
boolean isPbChange=false;
//3.
while(pa!=null&&pb!=null){
//4.
if(pa==pb){
return pa;
}
//5.
pa=pa.next;
pb=pb.next;
//6.
if(isPaChange&&isPbChange&&pa==null&&pb==null){
break;
}
//7.
if(pa==null){
pa=headB;
isPaChange=true;
}
if(pb==null){
pb=headA;
isPbChange=true;
}
}
//8.
return null;
}
}