zoukankan      html  css  js  c++  java
  • 剑指Offer编程题(Java实现)——两个链表的第一个公共结点

    题目描述:

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

    思路一:

     设 A 的长度为 a + c,B 的长度为 b + c,其中 c 为尾部公共部分长度,可知 a + c + b = b + c + a。

    当访问链表 A 的指针访问到链表尾部时,令它从链表 B 的头部重新开始访问链表 B;同样地,当访问链表 B 的指针访问到链表尾部时,令它从链表 A 的头部重新开始访问链表 A。这样就能控制访问 A 和 B 两个链表的指针能同时访问到交点。

    实现:

    /*
    public class ListNode {
        int val;
        ListNode next = null;
    
        ListNode(int val) {
            this.val = val;
        }
    }*/
    public class Solution {
        public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
            // 很厉害的解法
            ListNode l1 = pHead1, l2 = pHead2;
            while (l1 != l2) {
                l1 = (l1 == null) ? pHead2 : l1.next;
                l2 = (l2 == null) ? pHead1 : l2.next;
            }
            return l1;
            
        }
    }

    运行时间:19ms

    占用内存:9528k

    思路二:

    暴力双循环迭代

    实现:

    /*
    public class ListNode {
        int val;
        ListNode next = null;
    
        ListNode(int val) {
            this.val = val;
        }
    }*/
    public class Solution {
        public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
            // 暴力解法
            ListNode tmp1 = pHead1;
            ListNode tmp2 = pHead2;
            while(tmp1 != null){
                while(tmp2 != null){
                    if(tmp1 == tmp2)
                        return tmp1;
                    tmp2 = tmp2.next;
                }
                tmp2 = pHead2;
                tmp1 = tmp1.next;
            }
            return null;
        }
    }

    运行时间:21ms

    占用内存:9680k

    思路参考:https://www.nowcoder.com/discuss/198840

  • 相关阅读:
    前端基础开发之HTML
    内置函数(二)
    html
    内置函数(一)
    二进制安装mysql
    .net Parallel并行使用
    MVC 枚举绑定 DropDownList
    MVC扩展Url.Action方法解决复杂对象参数问题
    Index.cshtml”处的视图必须派生自 WebViewPage 或 WebViewPage<TModel>。
    设置网站URL启动
  • 原文地址:https://www.cnblogs.com/MWCloud/p/11323173.html
Copyright © 2011-2022 走看看