一、题目描述
题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
二、题解
注意题目所说的相交,相交节点不只是数值上的相等,而是相交以后两条链变成一条链。
解决改题目,我们可以:
1、先求出两条链表的长度,然后求出长度的差值len;
2、定义两个节点pl、ps ,让pl节点始终指向较长的那个链表,ps节点始终指向较短的那个链表,并且一开始,两个节点均指向链表的头节点;
3、让指向较长链表的pl节点先走差值len步,然后pl、ps两个节点一起走,直到两个节点相遇,此时分两种情况:
- pl = null,即两个链表不相交,返回null
- pl不为空,则此时pl所指节点正是所求的相交节点
三、代码
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode pl = headA;
ListNode ps = headB;
int len1 = 0;
int len2 = 0;
while(pl != null) {
len1++;
pl = pl.next;
}
while(ps != null) {
len2++;
ps = ps.next;
}
pl = headA;
ps = headB;
int len = len1-len2;
if(len < 0) {
pl = headB;
ps = headA;
len = len2-len1;
}
while(len!=0) {
pl = pl.next;
len--;
}
while(pl!=ps) {
pl = pl.next;
ps = ps.next;
}
if(pl == null) {
return null;
}
return pl;
}
}