题解 | #两个链表的第一个公共结点#
两个链表的第一个公共结点
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; } } };