如何判断两个链表相交

方法一:

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

posted @ 2013-01-21 22:19  GOD_YCA  阅读(638)  评论(0编辑  收藏  举报