//单向循环链表
class Node {
constructor (data) {
this.data = data
this.next = null
}
}
class CycleList {
constructor () {
this.head = null
this.length = 0
}
//追加数据
append (data) {
let newNode = new Node(data)
let current = this.head
if (!this.head) {
this.head = newNode
newNode.next = this.head
}else {
while (current.next != this.head) {
current = current.next
}
newNode.next = this.head
current.next = newNode
}
this.length++
return true
}
//插入数据
insert (posi, data) {
if (posi < 0 || posi > this.length) return false
let newNode = new Node(data)
let current = this.head
let index = 0
if (posi == 0) {
if (this.head) {
while (current.next != this.head) {
current = current.next
}
newNode.next = this.head
current.next = newNode
this.head = newNode
}else {
this.head = newNode
newNode.next = this.head
}
}else if (posi == this.length) {
while (current.next != this.head) {
current = current.next
}
current.next = newNode
newNode.next = this.head
}else {
while (index++ < posi -1) {
current = current.next
}
newNode.next = current.next
current.next = newNode
}
this.length++
return true
}
//删除指定位置数据
removeAt (posi) {
if (posi < 0 || posi > this.length - 1) return false
let current = this.head
let index = 0
if (posi == 0) {
if (this.length != 1) {
while (current.next != this.head) {
current = current.next
}
current.next = this.head.next
this.head = this.head.next
}else {
this.head = null
}
}else {
while (index++ < posi - 1) {
current = current.next
}
current.next = current.next.next
}
this.length--
return true
}
remove (data) {
//删除所有data的数据
while (this.indexOf(data) != -1) {
//删除第一个出现的data数据
this.removeAt(this.indexOf(data))
}
return true
}
//查找
indexOf (data) {
//遍历
let current = this.head
let index = 0
while (current.next != this.head) {
if (current.data === data ) {
return index
}else {
index++
current = current.next
}
}
if (current.data === data) {
return index
}
return -1
}
isEmpty () {
return this.head == null
}
size () {
return this.length
}
}
let cList = new CycleList()
cList.append(0)
cList.append(1)
cList.append(2)
cList.append(3)
cList.append(4)
cList.append(5)
cList.insert(0, 'start')
cList.insert(7, 'end')
cList.insert(4,'four')