牛客题霸 [两个链表的第一个公共结点] C++题解/答案

题目描述

输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)

题解:

可以理解成两个数组找第一个公共节点
就是两个for循环,从第一个数组的第一位开始与第二个数组的第一位开始判断是否相同,然后比第二个数组的第二位,一直这样进行
但这里是链表,所以一开始没跑完第二个链表,就要重新回到起点
list2 = pHead2;
详细看代码

代码:

/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/
class Solution {
   
public:
    ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
   
        if(!pHead1 || !pHead2) return NULL;
    ListNode *list1,*list2;
    list1 = pHead1;
    list2 = pHead2;
    
    while(list1 != NULL)
    {
   
        list2 = pHead2;
        while(list2 !=NULL)
        {
   
            if(list1 == list2)
            {
   
                return list1;
                break;
            }
            else
            {
   
                list2 = list2->next;
            }
        }
        
        list1 = list1->next;
    }
    
    return list1;
    }
};