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.
其实就是找两个链表的第一个公共节点,参见剑指offer
/**
* 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 len1=0;
int len2=0;
ListNode temp1=headA;
ListNode temp2=headB;
while(headA!=null){
headA=headA.next;
len1++;
}
while(headB!=null){
headB=headB.next;
len2++;
}
int diff=Math.abs(len1-len2);
if(len1>len2){
while(diff>0){
temp1=temp1.next;
diff--;
}
}else if(len1<len2){
while(diff>0){
temp2=temp2.next;
diff--;
}
}
while(temp1!=null){
if(temp1!=temp2){
temp1=temp1.next;
temp2=temp2.next;
}else{
return temp1;
}
}
return null;
}
}