剑指offer刷题

两个链表的第一个公共结点

2019-06-02  本文已影响0人  侯俊同学

题目描述

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

思路

两个链表如果有公共结点,有如下特点:

题解

class Solution {
public:
    ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
        if(pHead1==NULL||pHead2==NULL)
            return NULL;
        int len1 = GetLength(pHead1);
        int len2 = GetLength(pHead2);
        //谁长谁先走多出来的部分,直到两个长度一样
        if(len1>len2){
            int len = len1-len2;
            while(len>0){
                pHead1 = pHead1->next;
                len--;
            }
        }else if(len1<len2){
            int len = len2-len1;
            while(len>0){
                pHead2 = pHead2->next;
                len--;
            }
        }
        
        while(pHead1!=NULL){
            if(pHead1 == pHead2)
                break;
            pHead1 = pHead1->next;
            pHead2 = pHead2->next;
        }
        return pHead1;
    }
    
private:
    int GetLength(ListNode* pHead){
        int len = 0;
        while(pHead!=NULL){
            len++;
            pHead = pHead->next;
        }
        return len;
        
    }
};
上一篇 下一篇

猜你喜欢

热点阅读