题解 | #两个链表的第一个公共结点#
两个链表的第一个公共结点
https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
#include <iostream>
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
int m1=0,m2=0;
ListNode* p1=pHead1,* p2=pHead2;
//m1,m2分别记录两个链表的长度
while(p1!=nullptr)
{
++m1;
p1=p1->next;
}
while(p2!=nullptr)
{
++m2;
p2=p2->next;
}
//如果有空链表返回空
if(m1==0||m2==0)
{
return nullptr;
}
else
{
int n=abs(m1-m2);
ListNode* Longp,* Shortp;
m1>m2?(Longp=pHead1,Shortp=pHead2):(Longp=pHead2,Shortp=pHead1);//如果希望三目运算符运行多条指令,应该使用?(多条指令):(多条指令)的形式,圆括号不可省略。
while(n)//先将开始结点对其
{
Longp=Longp->next;
--n;
}
while(Longp!=nullptr&&Shortp!=nullptr)//同时向后移动,查看是否到相同结点
{
if(Longp==Shortp)
{
return Longp;
}
cout<<Longp->val<<" "<<Shortp->val<<endl;
Longp=Longp->next;
Shortp=Shortp->next;
}
return nullptr;
}
}
};
海康威视公司福利 1182人发布