架构师训练营第八周作业
有两个单向链表(链表长度分别为 m,n),这两个单向链表有可能在某个元素合并,也可能不合并,如下图所示的这样。现在给定两个链表的头指针,在不修改链表的情况下,如何快速地判断这两个链表是否合并?如果合并,找到合并的元素,也就是图中的 x 元素。
请用代码(或伪代码)描述算法,并给出时间复杂度。
代码
复制代码
复杂度
假设两个列表的长度分别为 m, n,则时间复杂度为: O(max(m,n))
画出 DataNode 服务器节点宕机的时候,HDFS 的处理过程时序图
有两个单向链表(链表长度分别为 m,n),这两个单向链表有可能在某个元素合并,也可能不合并,如下图所示的这样。现在给定两个链表的头指针,在不修改链表的情况下,如何快速地判断这两个链表是否合并?如果合并,找到合并的元素,也就是图中的 x 元素。
请用代码(或伪代码)描述算法,并给出时间复杂度。
// Node elements constitue list
type Node struct {
value int
next *Node
}
// CheckFirstCommnality CheckFirstCommnality checks the first commanlity node between two lists, if no such node ,then returns nil
func CheckFirstCommnality(m *Node, n *Node) *Node {
if m == nil || n == nil {
return nil
}
// tailM points to the head of reversed list m
var tailM *Node = nil
for p := m; p != nil; {
r := &Node{p.value, tailM}
tailM = r
p = p.next
}
// tailN points to the head of reversed list n
var tailN *Node = nil
for p := n; p != nil; {
r := &Node{p.value, tailN}
tailN = r
p = p.next
}
var commnality *Node = nil
for rm, rn := tailM, tailN; rm != nil && rn != nil && rm != rn; {
commnality = rm
rm = rm.next
rn = rn.next
}
return commnality
}
假设两个列表的长度分别为 m, n,则时间复杂度为: O(max(m,n))
画出 DataNode 服务器节点宕机的时候,HDFS 的处理过程时序图
还未添加个人签名 2018.02.24 加入
还未添加个人简介
促进软件开发及相关领域知识与创新的传播
评论