【发布时间】:2020-12-02 03:20:32
【问题描述】:
有人可以通过展示其中一种方法实现来帮助我在 Scala 中创建不可变的双向链表吗?另外,您能否通过让我们实现 prepend(element:Int): DoublyLinkedList[Int] 来提供一个示例?
【问题讨论】:
-
你不能创建一个不可变的双向链表,否则效率会非常低,因为任何返回新列表的操作都需要复制整个列表,这意味着即使是空列表也需要复制而不是共享。 - 你为什么需要这个?做作业?如果是这样,您至少能够实现单个链表吗?
-
当您创建一个新元素时,您可以将对前一个元素的引用传递给它并使其不可变。但只有在创建此元素之后,您才有可以传递给前一个元素的引用,以便将其存储为“下一个”。您也不能有一个
Nil元素,因为它不能指向 2 个不同列表中的 2 个先前元素。事实上,在创建新元素时,您不能重用列表中的任何元素。因此,您必须在每个操作上重新分配整个列表,使其基本上是一个没有 O(1) 索引访问的无效不可变数组。 -
查找搜索词“Credit Card Transform”和“Tying the Knot”。这是您需要的两个技巧。