自己的想法:两个链表的第一个公共节点在链表的后面 -> 要从后往前判断,相等则继续向前 -> 如何从后向前移动?比如从最后一个节点找到倒数第二个节点 -> 第一次遍历时把链表反转(×)
正解:使用栈,后进先出,遍历链表时把每个节点入栈,最后从栈顶开始比较,满足从后向前判断,同时保证链表的节点顺序。
另一种解法:长的链表先走x步,使剩下的链表长度和另一个链表长度相等,从此处向后比较。代码如下:

/*
public class ListNode {
    int val;
    ListNode next = null;
    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
        if (pHead1 == null || pHead2 == null) {
            return null;
        }
        int len1 = 0, len2 = 0;
        ListNode phead1 = pHead1, phead2 = pHead2;
        while (phead1 != null) {
            len1++;
            phead1 = phead1.next;
        }
        while (phead2 != null) {
            len2++;
            phead2 = phead2.next;
        }
        if (len1 < len2) {
            int k = len2 - len1;
            while (k > 0) {
                pHead2 = pHead2.next;
                k--;
            }
        } else {
            int k = len1 - len2;
            while (k > 0) {
                pHead1 = pHead1.next;
                k--;
            }
        }
        while (pHead1 != null) {
            if (pHead1 == pHead2) {
                return pHead1;
            } else {
                pHead1 = pHead1.next;
                pHead2 = pHead2.next;
            }
        }
        return null;
    }
}