public class E52FirstCommonListNode {
//两个链表的第一个公共节点
private static class ListNode {
int value;
ListNode nextNode;
}
public static ListNode find(ListNode root1, ListNode root2) {
if (root1 == null || root2 == null)
return null;
//计算链表长度,区分长短链表
int listLength1 = getListLength(root1);
int listLength2 = getListLength(root2);
int preSteps = listLength1 - listLength2;
ListNode longListRoot = root1;
ListNode shortListRoot = root2;
if (preSteps < 0){
longListRoot = root2;
shortListRoot = root1;
preSteps = 0 - preSteps;
}
//长链表先行,与短链表对齐
for (int i = 0; i < preSteps; i++){
longListRoot = longListRoot.nextNode;
}
//找到第一个相等的节点
while(longListRoot != null && shortListRoot != null && shortListRoot != longListRoot){
longListRoot = longListRoot.nextNode;
shortListRoot = shortListRoot.nextNode;
}
return longListRoot;
}
private static int getListLength(ListNode root) {
if (root == null)
return 0;
int length = 0;
while(root != null){
length++;
root = root.nextNode;
}
return length;
}
}
两个链表的第一个公共节点(Java实现)
最新推荐文章于 2021-09-01 17:46:42 发布