zoukankan      html  css  js  c++  java
  • 如何判断两个链表相交

    方法一:

    最笨的方法,遍历链表1,每遍历一个节点,判断这个节点是否在链表2中

    for node1 in l1

      for node2 in l2

        if node1 == node2

          return True

    时间复杂度比较高,O(l1.length*l2.length)

    方法二:

    万能的hash,对于节点地址进行hash到不同的桶中,首先将l1的所有节点的地址hash到不同的桶中,然后对l2的每个节点,将它的节点地址hash到不同的桶中,一旦发现两个节点hash到相同的桶中,说明节点地址有相同,则相交。

    时间复杂度:O(l1.length+l2.length)

    方案三:

    如果两个链表中的相交,必然尾节点肯定是一样的,只要两个链表都遍历到尾部,即可,那么只要比较尾节点是否一致即可

    时间复杂度:O(l1.length+l2.length)

    方案4:

    将一个链表首尾相接,判断链表是否有环

    如何求出相交节点?

    方案一:

    好比hash法,第一个同时hash到相同的桶的节点就是相交节点

    方案二:

    求环入口节点

    方案三:

    判断相交的过程中要分别遍历两个链表,同时记下各自的长度。然后再遍历一次:长链表节点先从头节点出发前进(lengthMax-lenghMin)步,之后两个链表同时前进,每次一步,相遇的第一个节点即为两个链表相交的第一个节点。

  • 相关阅读:
    King's Quest
    JavaScript“并非”一切皆对象
    javascript中的style只能取到在HTML中定义的css属性
    jquery中的$(this)和this
    WEB安全字体(Web Safe Fonts)-网页设计用什么字体兼容性好?
    css各种水平垂直居中
    css绘制各种形状
    css3椭圆运动
    通过时间戳控制类
    js中的面向对象程序设计
  • 原文地址:https://www.cnblogs.com/GODYCA/p/2870472.html
Copyright © 2011-2022 走看看