zoukankan      html  css  js  c++  java
  • 剑指Offer_#52_两个链表的第一个公共节点

    剑指Offer_#52_两个链表的第一个公共节点

    Contents

    题目

    输入两个链表,找出它们的第一个公共节点。
    如下面的两个链表:

    在节点 c1 开始相交。

    注意:

    • 如果两个链表没有交点,返回 null.
    • 在返回结果后,两个链表仍须保持原有的结构。
    • 可假定整个链表结构中没有循环。
    • 程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。

    思路分析

    这题的难点在于,相交的节点之前的节点数量不同,所以如果两个指针同时遍历,不会相遇,也就无从判断是否是相交节点。
    一个很巧妙的方法是:
    两个指针同时遍历两个链表,如果遍历结束,这个指针就去遍历另一个链表。这样一来,相当于两个指针在相交节点之前走过的路程是一样的,正好可以在相交节点相遇。

    解答

    public class Solution {
        public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
            ListNode h1 = headA;
            ListNode h2 = headB;
            //如果没有交集,h1,h2最后同时指向null,跳出循环,返回null
            while(h1 != h2){
                if(h1 == null) h1 = headB;
                else h1 = h1.next;
                if(h2 == null) h2 = headA;
                else h2 = h2.next;
            }
            return h1;
        }
    }

    复杂度分析

    时间复杂度O(n)
    空间复杂度O(1)

  • 相关阅读:
    微信授权页面执行ajax不执行,刷新才能执行
    spring boot使用jpa的@Modify的clearAutomatically=true的作用
    Excel转HTML
    reporting reportservice(SSRS) 让某行变成自增序号
    Excel的操作插件
    https-加解密
    防篡改防重
    加密解密
    git 常用命令

  • 原文地址:https://www.cnblogs.com/Howfars/p/13340611.html
Copyright © 2011-2022 走看看