架构一期第八周作业
发布于: 2020 年 11 月 15 日
作业一:
(至少完成一个)
有两个单向链表(链表长度分别为 m,n),这两个单向链表有可能在某个元素合并,也可能不合并,如下图所示的这样。现在给定两个链表的头指针,在不修改链表的情况下,如何快速地判断这两个链表是否合并?如果合并,找到合并的元素,也就是图中的 x 元素。
请用代码(或伪代码)描述算法,并给出时间复杂度。
伪代码:
class Node(object): def __init__(self, data, address=None): self.data = data self.next = addressclass LinkedList(object): def __init__(self): self.length = 0 self.head = None # 向链表追加节点 def add(self, data): if self.length: node = self.head while node.next: node = node.next else: node.next = Node(data) else: self.head = Node(data) self.length += 1 # 返回指定索引节点 def get(self, index): if index >= self.length: raise(IndexError, "list index out of range.") node = self.head while index: node = node.next index -= 1 return node # 删除一个节点 def delete(self, index): if index == 0: self.head = self.head.next elif index == self.length-1: self.get(index-1).next = None else: self.get(index - 1).next = self.get(index+1) self.length -= 1 # 在指定索引位置插入一个节点 def insert(self, index, data): if index == 0: self.add(data) else: node = Node(data, self.get(index)) self.get(index - 1).next = node self.length += 1 # 遍历链表中的节点值 def traverse(self): value = list() node = self.head while node: value.append(node.data) node = node.next return value # 遍历链表的节点中下一个节点的地址 def traverse_node(self): node_list = list() node = self.head while node: node_list.append(node.address) node = node.next return node_listif __name__ == "__init__": print("begin") Om = LinkedList # 创建长度为m的链表 On = LinkedList # 创建长度为n的链表 node_Om = Om.traverse_node # 遍历节点中下一个节点的地址形成顺序列表 node_On = On.traverse_node # 遍历节点中下一个节点的地址形成顺序列表 for i in node_Om: if node_Om[i] == node_On[i]: # 对比节点中下一个节点的地址 print("节点地址为" + str(i-1) + "的数据:" + Om[i-1] + "开始重合") break else: print("两个链表中没有重合元素") break
时间复杂度为:O(N)
请画出 DataNode 服务器节点宕机的时候,HDFS 的处理过程时序图。
作业二:
根据当周学习情况,完成一篇学习总结
划线
评论
复制
发布于: 2020 年 11 月 15 日阅读数: 27
版权声明: 本文为 InfoQ 作者【Airs】的原创文章。
原文链接:【http://xie.infoq.cn/article/0a131d94d32eb790734e8465d】。未经作者许可,禁止转载。
Airs
关注
Emmmmmmm 2018.02.28 加入
Emmmmmmm
评论