class Node{
constructor(data){
this.data = data
this.next = null
}
}
class LinkList{
constructor(data){
this.head = new Node(data)
}
genListNode(ListArr){
this.head = new Node(ListArr[0])
let i = 1
let cur = this.head
while(i < ListArr.length){
let val = ListArr[i]
cur.next = new Node(val)
cur = cur.next
i++
}
return this.head
}
findByValue = (value) => {
let currentNode = this.head
while(currentNode !== null && currentNode.data !== value){
currentNode = currentNode.next
}
console.log(currentNode)
return currentNode === null ? -1 : currentNode
}
findByIndex = (index) => {
let pos = 0
let currentNode = this.head
while(currentNode !== null && pos !== index){
currentNode = currentNode.next
pos++
}
console.log(currentNode)
return currentNode === null ? -1 : currentNode
}
insert = (value,element) => {
let currentNode = this.findByValue(element)
if(currentNode === -1){
console.log('未找到该元素')
return
}
let newNode = new Node(value)
newNode.next = currentNode.next
currentNode.next = newNode
}
delete = (value) => {
let currentNode = this.head
let preNode = null
while(currentNode !== null && currentNode.data !== value){
preNode = currentNode
currentNode = currentNode.next
}
if(currentNode === null) return -1
preNode.next = currentNode.next
}
reverse = () => {
let currentNode = this.head
let pre = null
let next
if(this.head == null || this.head.next == null) return -1
while(currentNode !== null){
next = currentNode.next
currentNode.next = pre
pre = currentNode
currentNode = next
}
this.head = pre
return this.head
}
print = () => {
let currentNode = this.head
while(currentNode !== null){
console.log(currentNode.data)
currentNode = currentNode.next
}
}
}
const list = new LinkList()
console.log('验证生成链表')
console.log('-------------生成链表------------')
list.genListNode([1,2,3,4])
console.log(list)
list.print()
console.log('-------------生成链表------------')
console.log('')
console.log('-------------插入操作------------')
list.insert(9,3)
list.print()
console.log('-------------插入操作------------')
console.log('')
console.log('-------------根据value查找节点------------')
list.findByValue(2)
console.log('-------------根据value查找节点------------')
console.log('')
console.log('-------------根据index查找节点------------')
list.findByIndex(2)
console.log('-------------根据index查找节点------------')
console.log('')
console.log('-------------删除操作------------')
list.delete(2)
console.log(list)
list.print()
console.log('-------------删除操作------------')
console.log('')
console.log('-------------链表反转------------')
const reversedList = list.reverse()
console.log(reversedList)
console.log('-------------链表反转------------')