[剑指offer]面试题37.两个链表中的第一个公共节点

来源:互联网 发布:逆行武侠 知乎 编辑:程序博客网 时间:2024/06/08 11:35

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


/*struct ListNode {    int val;    struct ListNode *next;    ListNode(int x) :            val(x), next(NULL) {    }};*/class Solution {public:    ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {        // 1.先求两链表长度        int len1 = 0;        int len2 = 0;        ListNode* pCur1 = pHead1;        ListNode* pCur2 = pHead2;        while(pCur1){            ++len1;            pCur1 = pCur1->next;        }        while(pCur2){            ++len2;            pCur2 = pCur2->next;        }        pCur1 = pHead1;        pCur2 = pHead2;        // 2.长的先行 abs(len1-len2)步        if(len1 >= len2){            for(int i = 0; i < len1 - len2; ++i)                pCur1 = pCur1->next;        }else{            for(int i = 0; i < len2 - len1; ++i)                pCur2 = pCur2->next;        }        // 3.平时移动,相等则返回        while(pCur1 && pCur2){            if(pCur1 == pCur2)                return pCur1;            pCur1 = pCur1->next;            pCur2 = pCur2->next;        }        return NULL;    }};
阅读全文
0 0
原创粉丝点击