题目描述
输入两个链表,找出它们的第一个公共结点。
思路:用两个指针扫描”两个链表“,最终两个指针到达 null 或者到达公共结点。
代码所基于的想法是,将两个链表L1和L2进行拼接,得到L1+L2和L2+L1两个拼接结果。这两个拼接后的链表长度是一致的,那么逐个判断即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public : ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) { ListNode *p1=pHead1; ListNode *p2=pHead2; while (p1!=p2) { p1=(p1==NULL ? pHead2:p1->next); p2=(p2==NULL ? pHead1: p2->next); } return p1; } }; |
长度相同有公共结点,第一次就遍历到;没有公共结点,走到尾部NULL相遇,返回NULL
长度不同有公共结点,第一遍差值就出来了,第二遍一起到公共结点;没有公共,一起到结尾NULL。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public : ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) { ListNode* p=pHead1; while (p!=NULL){ ListNode* q=pHead2; while (q!=NULL){ if (p==q){ return p; } q=q->next; } p=p->next; } return p; } }; |
拥抱明天!
不给自己做枷锁去限制自己。
别让时代的悲哀,成为你人生的悲哀。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
· 不到万不得已,千万不要去外包
· C# WebAPI 插件热插拔(持续更新中)
· 会议真的有必要吗?我们产品开发9年了,但从来没开过会
· 【译】我们最喜欢的2024年的 Visual Studio 新功能
· 如何打造一个高并发系统?