class LinkedList {
length = 0
head = null
Node = class {
data
next = null
constructor(data) {
this.data = data
}
}
append(data) {
const newNode = new this.Node(data)
if (this.length === 0) {
this.head = newNode
} else {
let currentNode = this.head
while (currentNode.next !== null) {
currentNode = currentNode.next
}
currentNode.next = newNode
}
this.length++
}
toString() {
let currentNode = this.head
let result = ''
while (currentNode) {
result += currentNode.data + ''
currentNode = currentNode.next
}
return result
}
insert(position, data) {
if (position < 0 || position > this.length) return false
const newNode = new this.Node(data)
if (position === 0) {
newNode.next = this.head
this.head = newNode
} else {
let currentNode = this.head
let previousNode = null
let index = 0
while (index++ < position) {
previousNode = currentNode
currentNode = currentNode.next
}
newNode.next = currentNode
previousNode.next = newNode
}
this.length++
return newNode
}
getData(position) {
if (position < 0 || position >= this.length) return false
let currentNode = this.head
let index = 0
while (index++ < position) {
currentNode = currentNode.next
}
return currentNode.data
}
indexOf(data) {
let currentNode = this.head
let index = 0
while (currentNode) {
if (currentNode.data === data) {
return index
}
currentNode = currentNode.next
index++
}
return -1
}
update(position, data) {
if (position < 0 || position >= this.length) return false
let currentNode = this.head
let index = 0
while (index++ < position) {
currentNode = currentNode.next
}
currentNode.data = data
return currentNode
}
removeAt(position) {
if (position < 0 || position >= this.length) return false
let currentNode = this.head
if (position === 0) {
this.head = this.head.next
} else {
let previousNode = null
let index = 0
while (index++ < position) {
previousNode = currentNode
currentNode = currentNode.next
}
previousNode.next = currentNode.next
}
this.length--
return currentNode
}
remove(data) {
this.removeAt(this.indexOf(data))
}
isEmpty() {
return this.length === 0
}
size() {
return this.length
}
}
const linkedList = new LinkedList()
linkedList.append('A')
linkedList.append('B')
linkedList.append('C')
linkedList.insert(0, '123')
console.log(JSON.stringify(linkedList))
linkedList.removeAt(1)
console.log(JSON.stringify(linkedList))
console