是否可以在OCaml中实现常量时间列表连接?
我想象一种方法,我们直接处理内存并通过将第一个列表的末尾指向第二个列表的开头来连接列表。基本上,我们正在创建某种类型的链接列表,如对象。
答案 0 :(得分:4)
使用正常的列表类型,不,你不能。你给出的算法就是实现的算法......但你仍然必须找到第一个列表的结尾......
有多种方法可以实现常量时间连接(有关详细信息,请参阅Okazaki)。我将简要介绍实现它的ocaml库的名称:BatSeq,BatLazyList(batteries),sequence,gen,Core.Sequence。 很确定在某处也有一个差异列表实现。
答案 1 :(得分:1)
列表已经(单独)链接列表。但列表节点是不可变的。因此,您将任何节点的指针更改为指向任何不同的指针。因此,为了连接两个列表,必须复制第一个列表中的所有节点。