八、性能二
有两个单向链表(链表长度分别为 m,n),这两个单向链表有可能在某个元素合并,也可能不合并,如下图所示的这样。现在给定两个链表的头指针,在不修改链表的情况下,如何快速地判断这两个链表是否合并?如果合并,找到合并的元素,也就是图中的 x 元素。
请用代码(或伪代码)描述算法,并给出时间复杂度。
第一种直接将 2 个链表进行双层遍历,查找到重合元素 x, 复杂度为 O(N^2)
过程如下
for(链表 1){//外层
for(链表 2){//内层
......
}
}
第二种思路是将前面内层循环 O(N)复杂度降为 O(1)复杂度
先将其中一个链表数据存放到 map 内, 复杂度为 O(N)
for(链表 2){
mapLink2.put()
}
再遍历另一个链表,查找到重合元素 x, 复杂度为 O(N)
for(链表 1){
mapLink2.containsKey(element); //O(1)
}
那么总的复杂度就会由之前的 O(N^2)降为 O(2N)了
评论