架构师训练营第 0 期 - 第 8 周 - 命题作业

用户头像
关注
发布于: 2020 年 07 月 29 日

作业一:

以下两题,至少完成一道

  • 有两个单向链表(链表长度分别为 m,n),这两个单向链表有可能在某个元素合并,如下图所示的这样,也可能不合并。现在给定两个链表的头指针,在不修改链表的情况下,如何快速地判断这两个链表是否合并?如果合并,找到合并的元素,也就是图中的 x 元素。

请用(伪)代码描述算法,并给出时间复杂度和空间复杂度。





答:

我的思路是新建一个以元素指针为key的hashset,存储链表1,用空间换时间。然后顺序遍历链表2,第一个成功在hashset中查找到的元素就是合并元素,如果没有找到就是没有合并。



伪代码:

func Foo(List1, List2) bool,Element :
hs = new HashSet

# 将List1转存到HashSet中备查
for elem in List1:
hs.Set(&elem)
# 遍历List2,寻找合并点
for elem in List2:
if hs.Get(&elem) != Null:
return True,elem

# 未找到
return False,Null



用户头像

关注

还未添加个人签名 2018.09.10 加入

还未添加个人简介

评论 (1 条评论)

发布
用户头像
请添加“极客大学架构师训练营标签”,便于分类~
2020 年 08 月 03 日 14:26
回复
没有更多了
架构师训练营第 0 期 - 第 8 周 - 命题作业