两链表第一个公共节点
题目:输入两个链表,找出它们的第一个公共结点。
思路:先求两个链表的长度,求长度差n,让长的那个链表先走n,两个链表再同时走,直到指针指到相同节点。
更简洁的答案:(实际上时间复杂度并没有减少,遍历的次数也没有减少,只是答案简洁)
public ListNode getIntersectionNode(ListNode headA, ListNode headB) { if (headA == null || headB == null) return null; ListNode pA = headA, pB = headB; while (pA != pB) { pA = pA == null ? headB : pA.next; pB = pB == null ? headA : pB.next; } return pA; } 作者:user7208t 链接:https://leetcode-cn.com/problems/two-sum/solution/tu-jie-xiang-jiao-lian-biao-by-user7208t/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) { if(pHead1==null||pHead2==null) return null; int n=0,m=0,cha=0; ListNode r1=pHead1,r2=pHead2; while(r1!=null){ n++; r1=r1.next; } while(r2!=null){ m++; r2=r2.next; } if(n>=m){ cha=n-m; while(cha-->0){ pHead1=pHead1.next; } while(pHead1!=pHead2){ pHead1=pHead1.next; pHead2=pHead2.next; } }else{ cha=m-n; while(cha-->0){ pHead2=pHead2.next; } while(pHead1!=pHead2){ pHead1=pHead1.next; pHead2=pHead2.next; } } return pHead1; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· 《HelloGitHub》第 106 期
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· 深入理解Mybatis分库分表执行原理
· 使用 Dify + LLM 构建精确任务处理应用