zoukankan      html  css  js  c++  java
  • 160. 相交链表

     

     

    弗洛伊德算法,快慢指针可解

    假设headA与headB相交,且分别长a+c,b+c(c为相交长度)

    那么必然存在a+c+b+c=b+c+a+c(即当我们遍历完headA后再遍历headB与

    先遍历headB再遍历headA,最终一定会在同一节点处相遇)

    然后我们发现,即使不相交,依然存在a+b=b+a,此时c=0,即在null处相交。   

    时间O(m+n)(即2条链表的长度和),空间O(1)

    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
            ListNode p1 = headA,p2=headB;
            while(p1!=p2){
                // 本链表遍历完后则遍历下一链表
                // 注意这里是p1==null 而不是p1.next==null
                // 假如判断条件为p1.next==null那么p1与p2永远不会为null
                // 那么在不相交的情况下p1!=p2恒等,因此需要设置为p1==null
                p1 = p1==null ? headB:p1.next;
                p2 = p2==null ? headA:p2.next;
            }
            return p1;
        }
    争取早日不再是一只菜鸡
  • 相关阅读:
    分治
    递归
    java三大特性之封装
    Java基础知识
    puk2367 拓扑排序
    puk1251 最小生成树
    puk1521 赫夫曼树编码
    DOSbox简单运行操作
    Mybatis初学经验----------------(2)
    mysql存储引擎MyISAM和InnoDB的区别
  • 原文地址:https://www.cnblogs.com/jchen104/p/14628392.html
Copyright © 2011-2022 走看看