两链表第一个公共节点

题目:输入两个链表,找出它们的第一个公共结点。

思路:先求两个链表的长度,求长度差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;
    }
复制代码

 

posted @   雪浪snowWave  阅读(160)  评论(0编辑  收藏  举报
编辑推荐:
· 深入理解 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 构建精确任务处理应用
点击右上角即可分享
微信分享提示