从LinkedList中删除当前元素

时间:2013-04-02 12:46:16

标签: scala linked-list iteration

在Scala中:remove()似乎没有LinkedList方法,由于某些原因我无法理解。虽然DoubleLinkedList有一个,但我不需要双链表。

另外,如何将current元素设置为第一个元素?我怎么知道它何时到达终点(是null?)

2 个答案:

答案 0 :(得分:2)

current中没有LinkedList元素。

LinkedList中只有2个字段:elem(或head)表示元素,而next(或tail表示LinkedList

您可以使用LinkedList测试isEmpty是否为空。每个LinkedList都包含一个空的LinkedList,因为它是最深的尾巴。有关ASCII插图,请参阅documentation

您可以删除第N个元素(如果有):

var current = myLinkedList.drop(n-2)
current.next = current.next.next

示例:

scala> val myList = LinkedList(1,2,3,4,5)
myList: scala.collection.mutable.LinkedList[Int] = LinkedList(1, 2, 3, 4, 5)

scala> val current = myList.drop(1)
current: scala.collection.mutable.LinkedList[Int] = LinkedList(2, 3, 4, 5)

scala> current.next = current.next.next
current.next: scala.collection.mutable.LinkedList[Int] = LinkedList(4, 5)

scala> myList
res0: scala.collection.mutable.LinkedList[Int] = LinkedList(1, 2, 4, 5)

你不能以这种方式删除第一个元素,但你可以忘掉它:

scala> var myList = LinkedList(1,2,3,4,5)
myList: scala.collection.mutable.LinkedList[Int] = LinkedList(1, 2, 3, 4, 5)

scala> myList = myList.next
myList: scala.collection.mutable.LinkedList[Int] = LinkedList(2, 3, 4, 5)

答案 1 :(得分:0)

首先,是否有一个特殊原因需要在Scala标准List上使用LinkedList?

正如在scaladoc中警告的那样,您可以很容易地使用LinkedList结束NPE,而List除非您实际引入空值,否则不会出现此问题。

List tail方法通常都是你需要的。请首先考虑这种方法,如果绝对必要,只能使用专门的课程。