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

  • 相关阅读:
    Atcoder Grand Contest 003 题解
    Atcoder Grand Contest 002 题解
    Atcoder Grand Contest 001 题解
    网络流24题
    AGC005D ~K Perm Counting
    loj6089 小Y的背包计数问题
    CF932E Team Work
    组合数学相关
    SPOJ REPEATS
    [SDOI2008]Sandy的卡片
  • 原文地址:https://www.cnblogs.com/GODYCA/p/2870472.html
Copyright © 2011-2022 走看看