I have written a double linked list in Scala. The list should be fixed in size and items are always added to the head. if the list reaches max size then the tail is dropped.
This is my code. I want to review this for brevity and functional approach.
sealed trait List {
var prev : List
var next : List
}
case object Empty extends List {
var prev : List = Empty
var next : List = Empty
}
case class Node(v: Int, p: List, n: List) extends List {
var prev = p
var next = n
}
class DoubleLinkedList(maxSize: Int) {
private var head : List = Empty
private var tail : List = Empty
private var currentSize = 0
def print() : Unit = {
var temp = head
while(temp != Empty) {
temp match {
case Empty => println("Empty")
case Node(v, _, _) => println(v)
}
temp = temp.next
}
}
def add(i: Int) : List = {
if (head == Empty || tail == Empty) {
val n = new Node(i: Int, Empty, Empty)
head = n
tail = n
currentSize += 1
Empty
} else {
val n = new Node(i, null, head)
head.prev = n
head = n
currentSize += 1
if (currentSize > maxSize) {
val retVal = tail
tail = tail.prev
tail.next = Empty
currentSize -= 1
retVal
} else Empty
}
}
}