/**
* 160. 相交链表
* https://leetcode-cn.com/problems/intersection-of-two-linked-lists/
*
* @param headA
* @param headB
* @return
*/
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
Set<ListNode> set = new LinkedHashSet<>();
while (headA != null) {
set.add(headA);
headA = headA.next;
}
if (!set.isEmpty()) {
while (headB != null) {
if (set.contains(headB)) {
return headB;
}
headB = headB.next;
}
}
return null;
}
public ListNode getIntersectionNode2(ListNode headA, ListNode headB) {
//有一个为空则没有相交节点
if (headA == null || headB == null) {
return null;
}
int lenthA = 1;
int lenthB = 1;
ListNode endA = headA;
ListNode endB = headB;
while (endA.next != null) {
endA = endA.next;
lenthA++;
}
while (endB.next != null) {
endB = endB.next;
lenthB++;
}
if (endA != endB) {
return null;
}
int cha;
if (lenthA > lenthB) {
cha = lenthB;
for (int i = 0; i < lenthA - lenthB; i++) {
headA = headA.next;
}
} else if (lenthA < lenthB) {
cha = lenthA;
for (int i = 0; i < lenthB - lenthA; i++) {
headB = headB.next;
}
} else {
cha = lenthA;
}
for (int i = 0; i < cha; i++) {
if (headA == headB) {
return headA;
}
headA = headA.next;
headB = headB.next;
}
return null;
}