两个链表的第一个公共结点-牛客BM10-让长和短链表在同一起跑线开始找公共结点
1 题目描述:
2 解题思路:
- 求出两个链表的差值
- 找出长的那个,让走完差值,此时长的和短的距离其终点长度一样了
- 最后让这两个结点同时走,用while循环
3.1. 走的过程中,若发现两个结点指向了同一个结点,就表明该结点就为第一个公共结点,则返回任意一个结点
3.2 若两个结点其中一个走到了终点,则表示不会有公共结点了,则返回null
3 参考代码:
import java.util.*;
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
int lpHead1 = getLength(pHead1);
int lpHead2 = getLength(pHead2);
ListNode longHead = null;
ListNode shortHead = null;
int differValue = 0;
if (lpHead1 <= lpHead2) {
shortHead = pHead1;
longHead = pHead2;
differValue = lpHead2 - lpHead1;
} else {
shortHead = pHead2;
longHead = pHead1;
differValue = lpHead1 - lpHead2;
}
for (int i = 0; i < differValue; i++) {
longHead = longHead.next;
}
while (shortHead != null && longHead != null) {
if (shortHead == longHead) {
return shortHead;
}
shortHead = shortHead.next;
longHead = longHead.next;
}
return null;
}
private int getLength(ListNode node) {
int i = 0;
while (node != null) {
i++;
node = node.next;
}
return i;
}
}