function createNode(_current,_next){
let current =_current || null
let next =_next || null
let headNode = null
class Node{
getCurrent(){
return current
}
getNext(){
return next
}
setNext(newnext){
next = newnext
}
}
return new Node()
}
function createSingleList(dataSource = []){
let headNode = null
class SingleList{
constructor (){
dataSource.forEach(item=>{
this.insert(item)
})
}
find(index){
if(index < 0){
return null
}
let i=0;
let findNode = headNode
while(i < index && findNode){
findNode=findNode.getNext()
i+=1
}
return findNode
}
insert(current,index){
index=index || this.len()
if(!headNode){
headNode =createNode(current,null)
return true
}
if(index===0){
headNode=createNode(current,headNode)
return true
}
let prevIndex = index-1
let nextIndex=index
let newNode = createNode(current,this.find(nextIndex))
let prevNode= this.find(prevIndex)
if(prevNode){
prevNode.setNext(newNode)
return true
}else {
return false
}
}
remove(index){
if(index < 0 || index>=this.len() || !headNode){
return false
}
if(index === 0){
headNode = headNode.getNext()
return true
}
let findNode = this.find(index)
let parentNode = this.find(index-1)
let sonNode = this.find(index+1)
parentNode.setNext(sonNode)
return true
}
toString(){
if(!headNode){
return []
}
let findNode = headNode
let arr=[{current:findNode.getCurrent(),next:findNode.getNext()}]
while(findNode){
findNode =findNode.getNext()
if(findNode){
arr.push({current:findNode.getCurrent(), next:findNode.getNext()})
}
}
return arr
}
len(){
return this.toString().length
}
}
return new SingleList()
}