输入两个链表,找出它们的第一个公共结点。

学习了一叶浮尘的题解自己整理了一下,在此感谢大佬~

注意链表节点相同表示该节点的value和next均相同,故一旦两个链表有相同节点,则自该节点起,后面的链表均相同。
该问题下两个链表的遍历和比较,主要是需要让两个链表长度相同。故直接将p2加在p1后面,p1加在p2后面即可:
p1:5个不同节点+3个相同节点
P2:2个不同节点+3个相同节点
new p1:5+3+2+3
new p2:2+3+5+3
由此可见最后第一次出现p1 = p2的节点即为两个链表的交点。

public class Solution {
    public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
        if(pHead1 == null || pHead2 == null) return null;
        ListNode p1 = pHead1;
        ListNode p2 = pHead2;
        while (p1 != p2) {
            p1 = p1.next;
            p2 = p2.next;
            if (p1 != p2 && p1 == null) {
                p1 = pHead2;
            }
            if (p1 != p2 && p2 == null) {
                p2 = pHead1;
            }
        }
        return p1;
    }
}