写点什么

架构师训练营 - 作业 - 第八周

用户头像
Max2@12
关注
发布于: 2020 年 11 月 15 日

1、算法题

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

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



/**
* 功能:判断两个链表是否在某个节点开始,并为一条链表
* 节点重合的判定标准:地址比较,直接使用==进行内存地址比较
* 算法:暂不考虑空间复杂度,直接将链表构建为两个堆栈,然后逐一出栈比较。等于从两个链表的最后一个
* 元素向前遍历比较。算法复杂度O(n+m)
*
* @param list1 链表1
* @param list2 链表2
* @return 合并开始的第一个节点,如果没有重合,则返回null
*/
public static <T> T isMergedOfTwoList(List<T> list1, List<T> list2) {
Stack<T> stackOfList1 = new Stack<>();
Stack<T> stackOfList2 = new Stack<>();
list1.stream().forEach((a)->stackOfList1.push(a));
list2.stream().forEach((a)->stackOfList2.push(a));
T firstCrossNode = null;
while(!stackOfList1.isEmpty() && !stackOfList2.isEmpty()) {
if ( stackOfList1.peek() == stackOfList2.peek() ) {
firstCrossNode = stackOfList1.peek();
stackOfList1.pop();
stackOfList2.pop();
}
else {
break;
}
}
return firstCrossNode;
}



2、请画出 DataNode 服务器节点宕机的时候,HDFS 的处理过程时序图



用户头像

Max2@12

关注

还未添加个人签名 2018.12.13 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 - 作业 - 第八周