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;
}
}