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.
Notes:
null
.Credits:
Special thanks to @stellari for adding this problem and creating all test cases.
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { if(headA==null || headB==null) return null; int Aindex_length=getLength(headA); int Bindex_length=getLength(headB); int dis=Math.abs(Aindex_length-Bindex_length); ListNode Aindex=headA; ListNode Bindex=headB; if(Aindex_length>=Bindex_length){ for(int i=0;i<dis;i++){ Aindex=Aindex.next; } while(Bindex!=null){ if(Aindex.val==Bindex.val){return Aindex;} else{ Aindex=Aindex.next; Bindex=Bindex.next; } } } Aindex=headA; Bindex=headB; if(Aindex_length<Bindex_length){ for(int i=0;i<dis;i++){ Bindex=Bindex.next; } while(Aindex!=null){ if(Aindex.val==Bindex.val){return Aindex;} else{ Aindex=Aindex.next; Bindex=Bindex.next; } } } return null; } public int getLength(ListNode head){ ListNode index=head; int length=1; while(index.next!=null){ index=index.next; length++; } return length; } }
/********************************
* 本文来自博客 “李博Garvin“
* 转载请标明出处:http://blog.csdn.net/buptgshengod
******************************************/