Week 08- 作业一:双链表公共节点
双链表
有两个单向链表(链表长度分别为 m,n),这两个单向链表有可能在某个元素合并,如下图所示的这样,也可能不合并。现在给定两个链表的头指针,在不修改链表的情况下,如何快速地判断这两个链表是否合并?如果合并,找到合并的元素,也就是图中的 x 元素。
请用(伪)代码描述算法,并给出时间复杂度和空间复杂度。
实现:c# net core
节点定义:
思路一,遍历2个链表,并使用HASH存储,依赖HASH的特性来寻找第一个公共节点
时间复杂度:O(m+n)
空间复杂度:O(m+n)
思路二 需要修改链表
将第一条链表NEXT全部置为NULL,然后遍历第二个链表,第一个NEXT为NULL的NODE,即为公共节点
时间复杂度:O(m+n)
空间复杂度:O(1)
思路三 双指针法,这个是看网上题解得到的
两个链表长度分别为L1+C、L2+C, C为公共部分的长度, 第一个人走了L1+C步后,回到第二个人起点走L2步;第2个人走了L2+C步后,回到第一个人起点走L1步。 当两个人走的步数都为L1+L2+C时就两个链表到达公共节点
时间复杂度:O(m+n)
空间复杂度:O(1)
DataNode 服务器节点宕机的时候,HDFS 的处理过程时序图
版权声明: 本文为 InfoQ 作者【dean】的原创文章。
原文链接:【http://xie.infoq.cn/article/f26c21d6e4850877e348a535f】。文章转载请联系作者。
评论