mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-19 01:55:51 +08:00
89 lines
1.4 KiB
JavaScript
89 lines
1.4 KiB
JavaScript
class Node {
|
|
constructor (data, next = null) {
|
|
this.data = data
|
|
this.next = next
|
|
}
|
|
}
|
|
|
|
class SinglyCircularLinkedList {
|
|
constructor () {
|
|
this.head = null
|
|
this.size = 0
|
|
}
|
|
|
|
insert (data) {
|
|
const node = new Node(data)
|
|
|
|
if (!this.head) {
|
|
node.next = node
|
|
this.head = node
|
|
this.size++
|
|
} else {
|
|
node.next = this.head
|
|
|
|
let current = this.head
|
|
|
|
while (current.next.data !== this.head.data) {
|
|
current = current.next
|
|
}
|
|
|
|
current.next = node
|
|
this.size++
|
|
}
|
|
}
|
|
|
|
insertAt (index, data) {
|
|
const node = new Node(data)
|
|
|
|
if (index < 0 || index > this.size) return
|
|
|
|
if (index === 0) {
|
|
this.head = node
|
|
this.size = 1
|
|
return
|
|
}
|
|
|
|
let previous
|
|
let count = 0
|
|
let current = this.head
|
|
|
|
while (count < index) {
|
|
previous = current
|
|
current = current.next
|
|
count++
|
|
}
|
|
|
|
node.next = current
|
|
previous.next = node
|
|
this.size++
|
|
}
|
|
|
|
remove () {
|
|
if (!this.head) return
|
|
|
|
let prev
|
|
let current = this.head
|
|
|
|
while (current.next !== this.head) {
|
|
prev = current
|
|
current = current.next
|
|
}
|
|
|
|
prev.next = this.head
|
|
this.size--
|
|
}
|
|
|
|
printData (output = value => console.log(value)) {
|
|
let count = 0
|
|
let current = this.head
|
|
|
|
while (current !== null && count < this.size) {
|
|
output(current.data)
|
|
current = current.next
|
|
count++
|
|
}
|
|
}
|
|
}
|
|
|
|
export { SinglyCircularLinkedList }
|