将问题转化为求环的入口问题
/**
* 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;
ListNode temp_headA = headA;
ListNode temp_headB = headB;
ListNode end = null;
while (temp_headA != null) {
if (temp_headA.next == null)
end = temp_headA;
temp_headA = temp_headA.next;
}
end.next = temp_headB;
//以A为起点, 找环的入口
ListNode fast = headA;
ListNode slow = headA;
boolean bj = false;
while (true) {
if (fast == null || slow == null) {
break;
}
if (fast.next !=null && fast.next.next != null) {
fast = fast.next.next;
} else
break;
if (slow.next != null) {
slow = slow.next;
} else
break;
if (fast == slow) {
bj = true;
fast = headA;
while (true) {
if (fast == slow) {
break;
}
fast = fast.next;
slow = slow.next;
}
break;
}
}
end.next = null;
if (!bj)
return null;
return fast;
}
}