链表相交问题

来源:互联网 发布:php get class method 编辑:程序博客网 时间:2024/05/18 12:32

来说说链表相交问题。

假设有链表L1和L2,长度分别为N1,N2

1.相交判断

(1)遍历L1,对每一个节点的地址,建立哈希set,然后遍历L2,判断L2节点在不在哈希set中。

时间复杂度:o(N1 + N2/2)

空间复杂度:o(N1)

优点:可以顺便定位交点。

缺点:需要空间复杂度。

(2)都找到最后一个节点,然后判断最后一个节点是否一样即可。

如果维护一个尾节点的变量的话,这个查找复杂度,就是常量。不然需要遍历两个链表。

优点:无需空间,如果维护尾节点,效率极高。不维护,也比较快。

缺点:无法定位相交点。

(3)L1尾节点连到L1的首节点,然后判断L2是否有环。判断方法为,设置两个指针,一个移动慢,一个移动快。快的每移动一步,都和慢的指针,比较。

注意:还有一种判断有环的方法,就是将链表地址放入一个map,使用[]放入元素,然后判断返回值,看是否为false,如果是false就有环。

这样还能找到环是从哪里开始的。


2.交点定位

(1)1中的(1)

(2)比较两个链表长度,然后让长的先移动差值,然后两个一起移动,每次移动比较。

(2)比(1)的优点是,无需空间复杂度。


3.有环链表

判断相交,可以采用,追嘛,肯定两个都会进入环,然后一快一慢就能追上。

0 0
原创粉丝点击