题目描述
解题思路
题目不难,两个链表有长有短,长出来的那部分一定不是相交节点存在的地方。
所以,我们先让长链表走完它长出来的那部分,然后再一同遍历两个链表,直到找到某个相同节点
package com.kami.leetcode.list_study;
/**
* @Description: TODO
* @author: scott
* @date: 2021年12月22日 10:33
*/
public class Solution_160 {
public ListNode1 getIntersectionNode(ListNode1 headA, ListNode1 headB){
if(headA == null || headB == null){
return null;
}
// 计算两个链表的长度
int lenA = 0;
int lenB = 0;
ListNode1 curA = headA;
ListNode1 curB = headB;
while (curA != null){
lenA++;
curA = curA.next;
}
while (curB != null){
lenB++;
curB = curB.next;
}
// 如果到最后一个节点了他俩仍然不是同一个节点,就说明这两个链表不相交
if(curA != curB){
return null;
}
// 长链表先走完长出来的那部分
ListNode1 longer = headA;
ListNode1 shorter = headB;
if(lenA < lenB){
longer = headB;
shorter = headA;
}
for(int i = 0; i < Math.abs(lenA - lenB); i++){
longer = longer.next;
}
// 然后再一同遍历两个链表,直到找到某个相同节点
while (longer != null && shorter != null){
if(longer == shorter){
return longer;
}
longer = longer.next;
shorter = shorter.next;
}
return null;
}
}