有两个单向链表(链表长度分别为 m,n),这两个单向链表有可能在某个元素合并,也可能不合并,如下图所示的这样。现在给定两个链表的头指针,在不修改链表的情况下,如何快速地判断这两个链表是否合并?如果合并,找到合并的元素,也就是图中的 x 元素。
请用代码(或伪代码)描述算法,并给出时间复杂度。
public class test {
public static void main(String[] args) {
List<String> bigOne = new ArrayList<>();
bigOne.add("d");
bigOne.add("e");
bigOne.add("f");
bigOne.add("x");
bigOne.add("y");
bigOne.add("z");
List<String> smallOne = new ArrayList<>();
smallOne.add("a");
smallOne.add("b");
smallOne.add("x");
smallOne.add("y");
smallOne.add("z");
int bigOneSize = bigOne.size();
int smallOneSize = smallOne.size();
//下标
int smallOnePositin = 0;
//合并点下标
int p = -1;
String value = "";
//循环bignone, 查找和smallone第一个相同点
for (int i = 0; i < bigOneSize; i++) {
if (p > -1) {
if (++smallOnePositin >= smallOneSize) {
break;
}
if (smallOne.get(smallOnePositin).equals(bigOne.get(i))) {
continue;
}
p = -1;
}
smallOnePositin = smallOne.indexOf(bigOne.get(i));
if (smallOnePositin > -1) {
p = smallOnePositin;
value = bigOne.get(i);
}
}
if (p > -1) {
System.out.println("the merge position is " + p + " and the value is " + value);
} else {
System.out.println("the two list can't be merged");
}
}
}
复制代码
the retsult
思路
查找链表 M 和链表 N 第一个相同元素位置,然后循环链表 M 后续元素和链表 N 里面元素进行比较,后续比较都相等则可以合并,否则不能合并,时间复杂度 O(m)。
总结
评论