1.两个链表的第一个公共节点
思路:首先遍历两个链表得到他们的长度,就能知道哪个链表比较长,以及长的链表比短的链表多几个节点。在第二次遍历的时候,在较长的链表上先走若干步,接着同时在两个链表上遍历,找到的第一个相同的节点就是他们的第一个公共节点。

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
            val(x), next(NULL) {
    }
};*/
class Solution {
public:
    ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
        int len1=GetLen(pHead1);
        int len2=GetLen(pHead2);
        int num=len1-len2;//假设1比2长
        ListNode *pLong=pHead1;
        ListNode *pShort=pHead2;
        if(len1<len2)
        {
            num=len2-len1;
            pLong=pHead2;
            pShort=pHead1;
        }
        for(int i=0;i<num;i++)
        {
            pLong=pLong->next;//长链表先走num步
        }
        while((pLong!=nullptr)&&(pShort!=nullptr)&&(pLong->val!=pShort->val))
        {
            pLong=pLong->next;
            pShort=pShort->next;
        }
        return pLong;

    }
    int GetLen(ListNode* Head)//求链表长度的函数
    {
        int len=0;
        ListNode *p=Head;
        while(p!=nullptr)
        {
            len++;
            p=p->next;
        }
        return len;
    }
};