【问题标题】:What is the current element in a Scala DoubleLinkedList?Scala DoubleLinkedList 中的当前元素是什么?
【发布时间】:2011-10-14 07:59:44
【问题描述】:

我正在查看 usingDoubleLinkedList。它的 remove() 方法说 “从双链表中删除当前节点。” 但页面中没有其他对 current 的引用。

当前节点是什么,如何设置它,当然这不是删除项目的唯一方法?

【问题讨论】:

    标签: scala scala-collections


    【解决方案1】:

    DoubleLinkedList 同时是列表本身一个列表节点,类似于常规List::。您可以分别使用nextprev 从一个单元格导航到下一个单元格或上一个单元格,并使用elem 获取单元格的值。

    scala> val list = collection.mutable.DoubleLinkedList(1,2,3,4,5)
    list: scala.collection.mutable.DoubleLinkedList[Int] = DoubleLinkedList(1, 2, 3, 4, 5)
    
    scala> list.next.next.remove() // list.next.next points on 3rd cell
    
    scala> list
    res0: scala.collection.mutable.DoubleLinkedList[Int] = DoubleLinkedList(1, 2, 4, 5)
    

    删除第一个单元格时要小心,因为您需要将保存列表的 var 重新分配给下一个单元格:

    scala> val list = collection.mutable.DoubleLinkedList(1,2,3,4,5)
    list: scala.collection.mutable.DoubleLinkedList[Int] = DoubleLinkedList(1, 2, 3, 4, 5)
    
    scala> list.remove() // remove first item
    
    scala> list // this is now a 'dangling' cell, although it still points to the rest of the list
    res6: scala.collection.mutable.DoubleLinkedList[Int] = DoubleLinkedList(1, 2, 3, 4, 5) // uh? didn't I remove the first cell?
    
    scala> list.next.prev // we can check that it is not pointed back to by its next cell
    res7: scala.collection.mutable.DoubleLinkedList[Int] = null
    

    【讨论】:

    • 好答案 - 有点遗憾的是文档不如 StackOverflow!
    • 有没有办法回到第一个而不用多次调用prev?
    • 不行,你必须一直打电话给prev,直到找到null
    • 这个答案中唯一缺少的是用另一个项目替换列表中的项目的示例。我相信这就像 list.insert(DoubleLinkedList(item)) 和 list.remove() 一样简单
    猜你喜欢
    • 1970-01-01
    • 2010-10-22
    • 2021-08-05
    • 1970-01-01
    • 2012-11-16
    • 1970-01-01
    • 2014-09-21
    • 2015-04-22
    • 2011-03-21
    相关资源
    最近更新 更多