import java.util.*;
/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
        //先计算两个链表的长度
        int n = 0, m = 0;
        ListNode tmpNode = pHead1;
        while (tmpNode != null) {
            n++;
            tmpNode = tmpNode.next;
        }
        tmpNode = pHead2;
        while (tmpNode != null) {
            m++;
            tmpNode = tmpNode.next;
        }
        ListNode fastNode, slowNode;
        if (n > m) {
            fastNode = pHead1;
            slowNode = pHead2;
        } else {
            fastNode = pHead2;
            slowNode = pHead1;
        }
        int step = (n > m) ? n - m : m - n;
        for (int i = 0; i < step; i++) {
            fastNode = fastNode.next;
        }
        while (fastNode != null) {
            if (fastNode == slowNode) return fastNode;
            fastNode = fastNode.next;
            slowNode = slowNode.next;
        }

        return fastNode;
    }
}

先求出链表的长度,然后求出两个链表长度之差。再使用快慢指针,快指针比慢指针快的步数就是这个差值。