Write a program to find the node at which the intersection of two singly linked lists begins.
For example, the following two linked lists:
A: a1 → a2
↘
c1 → c2 → c3
↗
B: b1 → b2 → b3
begin to intersect at node c1.
思路:首先得到两者的长度之差,然后长链表减去长度之差,开始比较,如果相同有交集,如果一直到空都不相同,那么就是没有交集。
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
if(headA==null||headB==null)//为空返回
return null;
int lengthA=0;
int lengthB=0;
ListNode a=headA;
ListNode b=headB;
while(a!=null)//A的长度
{
lengthA++;
a=a.next;
}
while(b!=null)//B的长度
{
lengthB++;
b=b.next;
}
a=headA;
b=headB;
int minus=lengthA-lengthB;//长度之差
while(minus!=0)//让长链表先走长度之差步
{
if(minus>0)
{
a=a.next;
minus--;
}
else
{
b=b.next;
minus++;
}
}
while(a!=null&&b!=null)//以此判断是否相等
{
if(a==b)//相等则返回
return a;
else//不相等继续判断
{
a=a.next;
b=b.next;
}
}
return null;//如果没有相等的,那么就返回null
}
}