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)步,之后两个链表同时前进,每次一步,相遇的第一个节点即为两个链表相交的第一个节点。

  • 相关阅读:
    Day-5 python
    Day-2 python
    OCR技术浅探
    yael图像检索库
    编程语言
    BOW模型和SIFT特征
    汉明嵌入
    Lua1.1 Lua 的参考手册 (三)
    Lua1.1 Lua 的参考手册 (二)
    Lua1.1 Lua 的参考手册 (一)
  • 原文地址:https://www.cnblogs.com/GODYCA/p/2870472.html
Copyright © 2011-2022 走看看