package list
import scala.collection.mutable.ArrayBuffer
import scala.reflect.ClassTag
/**
* Copyright (c) 2019 qingzhi.wu ALL Rights Reserved
*
* Project: arithmetic
* Package:
* Version: 1.0
* Created by HeartisTiger on 2019/9/15 17:34
*/
class LinkedList[E:ClassTag] {
private class Node() {
var e:E = _
var next:Node = _
def this(e:E,next:Node){
this()
this.e = e
this.next = next
}
def this(e:E){
this()
this.e = e
this.next = null
}
override def toString: String = e.toString
}
private var dummHead:Node = new Node()
private var size:Int = 0
def addFirst(e:E)={
add(e,0)
}
def addLast(e:E)={
add(e,size)
}
def add(e:E,index:Int)={
var pre = dummHead
for(i <- 0 until index ){
pre = pre.next
}
pre.next = new Node(e,pre.next)
size+=1
}
def contains(e:E):Boolean ={
var cur = dummHead.next
for(i <- 0 until size){
if(cur.e == e){
return true
}
cur = cur.next
}
return false
}
def update(e:E): Unit ={
var cur = dummHead.next
for(i <- 0 until size){
if(cur.e == e){
cur.e = e
}
cur = cur.next
}
}
def updateIndex(e:E,index:Int): Unit ={
var cur = dummHead.next
for(i <- 0 until index){
cur.e = e
cur = cur.next
}
}
def show(): Unit ={
var data = new ArrayBuffer[E]()
var pre = dummHead.next
for(i <- 0 until size){
data.append(pre.e)
pre = pre.next
}
printf("size = %d , Data[%s] \n",size,data.mkString(","))
}
def remove(index:Int):E={
var pre = dummHead
for(i <- 0 until index){
pre = pre.next
}
var ret = pre.next
pre.next = ret.next
// ret.next = null
size -=1
return ret.e
}
def removeFirst():E={
return remove(0)
}
def removeLast():E={
return remove(size)
}
}
测试
package list
/**
* Copyright (c) 2019 qingzhi.wu ALL Rights Reserved
*
* Project: arithmetic
* Package: list
* Version: 1.0
* Created by HeartisTiger on 2019/9/15 19:39
*/
object Main {
def main(args: Array[String]): Unit = {
val list = new LinkedList[Int]()
for(i <- 0 to 3){
list.addLast(i)
}
list.remove(0)
list.show()
list.addFirst(11)
list.show()
list.add(33,2)
list.show()
println(list.contains(3))
list.show()
list.remove(1)
list.show()
}
}