题目链接:
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
算法思想:
分别遍历两个链表求出它们的长度lenA和lenB,计算出lenA和lenB的差值记作diff,让长度较长的链表先移动diff个单位之后两个链表再同时移动,如果某一时刻两个节点相同时(注意这里的相同指的是引用相同并不是节点的值相同)则说明两个链表相交了,循环的终止条件是遍历的节点为空
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
int lenA = 0;
int lenB = 0;
ListNode cur = headA;
//1.求两个链表的长度
while(cur != null) {
lenA++;
cur = cur.next;
}
cur = headB;
while(cur != null) {
lenB++;
cur = cur.next;
}
if(lenA > lenB) {
//2.计算长度的差值
int diff = lenA - lenB;
ListNode a = headA;
ListNode b = headB;
//3.进行循环判断
while(diff != 0) {
a = a.next;
diff--;
}
while(a != b) {
a = a.next;
b = b.next;
}
return a;
} else {
int diff = lenB - lenA;
ListNode a = headA;
ListNode b = headB;
while(diff != 0) {
b = b.next;
diff--;
}
while(a != b) {
a = a.next;
b = b.next;
}
return a;
}
}