力扣链接:链表相交
链表节点相同是指地址而非值相同
/**
* 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) {
int sizeA = 0;
int sizeB = 0;
ListNode tmpA = headA;
ListNode tmpB = headB;
// 快指针
ListNode qucik;
// 慢指针
ListNode slow;
if (headA==null || headB==null) {
return null;
}
// 求出 A 链表的长度
while (tmpA != null) {
tmpA = tmpA.next;
sizeA++;
}
// 求出 B 链表的长度
while (tmpB != null) {
tmpB = tmpB.next;
sizeB++;
}
// 将两条链表的起始移动位置记录好
if (sizeA > sizeB) {
qucik = headA;
slow = headB;
}
else {
qucik = headB;
slow = headA;
}
int dif = Math.abs(sizeA - sizeB);
while (dif>0) {
qucik = qucik.next;
dif--;
}
// 同时移动两个链表指针直至指针地址一致
while (slow != null) {
if (slow != qucik) {
slow = slow.next;
qucik = qucik.next;
}
else if (slow == qucik && slow != null){
return slow;
}
}
return null;
}
}