牛客网刷题|两个链表的第一个公共结点

题目来源:牛客网

编程连接

题目描述

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

题目解析:

1、比较两者的长度,长的先走,之后一起走,走到两个相同的时候即是第一个公共结点
2、两个指针分别指向这两个结点,不同的时候,则往前走,相同则停。

代码:
1、先求长度

class Solution {
public:
    ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
        int len1 = GetlengthofList(pHead1);
        int len2 = GetlengthofList(pHead2);
        ListNode* pNode1 = pHead1;
        ListNode* pNode2 = pHead2;
        int len = len1 - len2;        
        if(len2 > len1)
        {
            pNode1 = pHead2;
            pNode2 = pHead1;
            len = len2 - len1;
        }

        for(int i =0;i<len ;i++)
        {
            pNode1 = pNode1->next;
        }

        while(pNode1!=NULL && pNode2!=NULL && pNode1!=pNode2)
        {
            pNode1 = pNode1->next;
            pNode2 = pNode2->next;
        }        
        return pNode1;        
    }
    int GetlengthofList(ListNode* pHead)
    {
        int length = 0;
        while(pHead!=NULL)
        {
            length++;
            pHead = pHead->next;            
        }        
        return length;
    }
};

2、直接看指针

ListNode *p1 = pHead1;
        ListNode *p2 = pHead2;
        while(p1!=p2){
            p1 = (p1==NULL ? pHead2 : p1->next);
            p2 = (p2==NULL ? pHead1 : p2->next);
        }
        return p1;

猜你喜欢

转载自blog.csdn.net/legalhighhigh/article/details/80233519
今日推荐