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
******************************************/
【LeetCode从零单排】No.160 Intersection of Two Linked Lists
原文地址:http://blog.csdn.net/buptgshengod/article/details/44174967