【问题标题】:Scala mutable list - insert element in the middleScala可变列表 - 在中间插入元素
【发布时间】:2015-11-26 10:24:35
【问题描述】:

如何实现在 DoubleLinkedList 中间插入元素而不应对它? 一般来说,我想在集合中找到一些元素,然后在它之后插入一个新元素。

有方法 DoubleLinkedList.insert 但我不太确定它是如何工作的。在文档中是这样描述的:

在该链表的当前位置插入链表

但是链表中的当前位置是什么?如何设置?

我想要 O(1) 的插入时间。

【问题讨论】:

  • 你不能有 O(1),因为你必须先导航到插入点,也就是链表中的 O(n)
  • 好吧,你是对的。我的意思是插入 O(1) + O(n) 来寻找元素。

标签: scala collections


【解决方案1】:

要在 DoubleLinkedList 的中间插入元素,首先要找到“中间”,然后进行插入:

val list = mutable.DoubleLinkedList(...)
list.next.next....insert(insertion)

【讨论】:

    【解决方案2】:

    首先,不能使用insert 插入元素,因为它需要DoubleLinkedList 作为参数

    def insert(that: DoubleLinkedList[A]): Unit

    只需使用 indexWhereapply 方法,例如将 30 替换为 3:

    yourlist(yourlist.indexWhere(_ == 30)) = 3

    【讨论】:

    • 问题不是关于插入,而不是替换?
    【解决方案3】:

    使用span 将集合分为包含条件的初始元素和不包含第一项的初始元素;例如

    val (l,r) = DoubleLinkedList(1,2,3,4,5).span(_ != 3)
    l = DoubleLinkedList(1, 2)
    r = DoubleLinkedList(3, 4, 5)
    

    然后像这样用33替换值3

    l ++ DoubleLinkedList(33) ++ r.tail
    

    注意在 Scala 2.11.6 中运行带有 -deprecation 的 REPL 以注意弃用警告,例如

    warning: object DoubleLinkedList in package mutable is deprecated:
    Low-level linked lists are deprecated.
    

    【讨论】:

      猜你喜欢
      • 2012-09-06
      • 2015-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-20
      • 2022-10-17
      • 2020-07-14
      相关资源
      最近更新 更多