Week8 命题作业((伪)代码描述两个单向链表找合并元素的算法并给出时间复杂度、HDFS 之 DataNode 宕机处理时序图)
有两个单向链表(链表长度分别为 m,n),这两个单向链表有可能在某个元素合并,如下图所示的这样,也可能不合并。现在给定两个链表的头指针,在不修改链表的情况下,如何快速地判断这两个链表是否合并?如果合并,找到合并的元素,也就是图中的 x 元素。
请用(伪)代码描述算法,并给出时间复杂度。
方法一:蛮力法
因为有嵌套for循环,所以时间复杂度为O(mn)
方法二:利用栈的概念
结合题目可知,链表若有合并,其元素从尾开始,肯定至少有一个合并的节点是尾结点,然后依次往头推进比较,若遇到两节点不同(不是合并的),则输出前一次合并的元素即为解
由于是单向链表,要取得尾结点只能遍历得到,若要从尾开始只能初始化两个栈,将两个链表的元素分别压入各自的栈空间里,由栈的“后进先出”特点,可以做到从尾部开始比较
由伪代码3个循环体可知,无嵌套循环,故时间复杂度为O(m+n)
请画出 DataNode 服务器节点宕机的时候,HDFS 的处理过程时序图。
版权声明: 本文为 InfoQ 作者【星河寒水】的原创文章。
原文链接:【http://xie.infoq.cn/article/1b2dd9a219b2d4f352b65a623】。未经作者许可,禁止转载。
评论