本文思路参考如下链接:http://blog.csdn.net/guoxudong5288/article/details/7594183
思路:比较两个链表的长度,计算长度差,令长的链表先遍历长度差个元素;然后两个链表同时遍历,并比较元素,如果相等返回相等元素
class Node{
int data;
Node next;
Node(int data,Node next){
this.data = data;
this.next = next;
}
}
Node head1 ; //链表1
Node head2; //链表2
......建立两个相交链表
/**
* 比较两个链表的长度,计算长度差,让长的链表先遍历长度差个元素,然后两个链表同时遍历
* 同时比较链两个元素是否相等,相等则返回
* @param head1
* @param head2
* @return
*/
private Node getIntersection(Node head1,Node head2){
int len1 = getLength(head1);
int len2 = getLength(head2);
int diffLen;
Node p1 = head1;
Node p2 = head2;
if(len1 < len2){
diffLen = len2-len1;
while(diffLen-- > 0){
p2 = p2.next;
}
}
else{
diffLen = len1 - len2;
while(diffLen-- > 0)
p1 = p1.next;
}
while(p1 != p2){
p1 = p1.next;
p2 = p2.next;
}
return p1;
}
/**
* 返回链表的长度
* @param head
* @return
*/
private int getLength(Node head){
int len=0;
Node p = head;
while(p != null){
len++;
p = p.next;
}
return len;
}