问题:给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。
方法:先判断两个链表是否为空链表。接下来:
1.计算两个链表的长度
2.pl要先走比短链表多出来的那一截
3.ps和pl同时走到相等时则为要求的焦点
代码:
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
if(headA==null){
return null;
}
if(headB==null){
return null;
}
int lenA=0;
int lenB=0;
//pl代表长链表的长度,ps代表短链表的长度
ListNode pl=headA;
ListNode ps=headB;
//计算两个链表的长度
while(pl!=null){
lenA++;
pl=pl.next;
}
while(ps!=null){
lenB++;
ps=ps.next;
}
//将pl、ps放到头结点处
pl=headA;
ps=headB;
//若len<0则 B长度比A长,pl将指向B
int len=lenA-lenB;
if(len<0){
pl=headB;
ps=headA;
len=lenB-lenA;
}
//pl要先走比短链表多出来的那一截
while(len!=0){
pl=pl.next;
len--;
}
//ps和pl相等时则为要求的焦点
while(pl!=ps){
pl=pl.next;
ps=ps.next;
}
if(pl==null&&ps==null){
return null;
}
return pl;
}