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

时间:2022-10-25 11:01:16

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

 

#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;
}