//单向循环链表 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‘)
原文:https://www.cnblogs.com/JunLan/p/12353945.html