Solution
/**
* 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 a = headA;
ListNode b = headB;
while (a.next != null && b.next != null) {
if (a == b) {
return a;
}
a = a.next;
b = b.next;
}
//长度一样,但是在while循环中没有发现交叉节点
if (a.next == null && b.next == null) {
if (a == b) {
return a;
}
return null;
}
if (a.next == null) {
a = headB;
return find(a, b.next, headA);
}
if (b.next == null) {
b = headA;
return find(b, a.next, headB);
}
return null;
}
public ListNode find(ListNode fast, ListNode slow, ListNode head) {
while (slow.next != null) {
fast = fast.next;
slow = slow.next;
}
fast = fast.next;
slow = head;
while (fast.next != null && slow.next != null) {
if (fast == slow) {
return fast;
}
fast = fast.next;
slow = slow.next;
}
if (fast == slow) {
return fast;
}
return null;
}
}
Problem#1