题目描述
编写一个程序找到两个单链表相交的起始节点
分析
求出两个链表的长度。当尾指针不相等时必不相交。让长链表指针先走一段长度之差,然后两个链表指针一起走,当相等时即为相交指针。当两个节点相等时,值和next指针一定都是相等的。所以不会存在123456和123546这种情况。
代码
public static ListNode IntersectionNode(ListNode headA, ListNode headB){
if(headA==null || headB==null) return null;
ListNode cur1 = headA;
ListNode cur2 = headB;
int n = 0;
while (cur1.next!=null){
n++;
cur1 = cur1.next;
}
while (cur2.next!=null){
n--;
cur2 = cur2.next;
}
if(cur1!=cur2){
return null;
}
// cur1指向长的
cur1 = n>0? headA:headB;
cur2 = cur1==headA? headB:headA;
n = Math.abs(n);
while(n!=0){
n--;
cur1 = cur1.next;
}
while(cur1!=cur2){
cur1 = cur1.next;
cur2 = cur2.next;
}
return cur1;
}