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

题目:输入两个链表,找出它们的第一个公共节点。链表的定义如下:

 

复制代码
#include <iostream>

using namespace std;

struct ListNode
{
    int val;
    ListNode *next;
    ListNode(int x):val(x),next(NULL){};
};

int len(ListNode *phead)
{
    ListNode *p=phead;
    int num=0;
    while(p!=NULL)
    {
        num++;
        p=p->next;
    }
    return num;
}

ListNode* Firstcommonnode(ListNode *phead1,ListNode *phead2)
{
    int num1,num2;
    ListNode *p1=phead1;
    ListNode *p2=phead2;
    num1=len(phead1);
    num2=len(phead2);
    //cout<<num1<<num2;
    while(num1!=num2)
    {
        if(num1>num2)
        {
            p1=p1->next;
            num1--;
        }
        else if(num1<num2)
        {
            p2=p2->next;
            num2--;
        }
    }
    //cout<<num1<<num2;
    while((p1->val!=p2->val)&&(p1!=NULL)&&(p2!=NULL))
    {
        p1=p1->next;
        p2=p2->next;
    }
    ListNode *common=p1;
    return common;

}


int main()
{
    ListNode *head1=new ListNode(-5);
    ListNode *p1=head1;
    for(int i=1;i<=2;i++)
    {
        ListNode *newNode1=new ListNode(i);
        p1->next=newNode1;
        p1=newNode1;
    }
    ListNode *head2=new ListNode(-4);
    ListNode *p2=head2;
    for(int i=-3;i<=2;i++)
    {
        ListNode *newNode2=new ListNode(i);
        p2->next=newNode2;
        p2=newNode2;
    }
    ListNode *First=Firstcommonnode(head1,head2);
    cout<<First->val;
    return 0;
}
复制代码

 

posted @   home普通的人  阅读(330)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示