写点什么

第八周 作业

用户头像
Jack
关注
发布于: 2020 年 12 月 13 日

有两个单向链表(链表长度分别为 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)。


总结


用户头像

Jack

关注

还未添加个人签名 2018.03.08 加入

还未添加个人简介

评论

发布
暂无评论
第八周 作业