class Stack {
constructor() {
this.stack = []
}
push(item) {
this.stack.push(item)
}
pop() {
this.stack.pop()
}
peek() {
const len = this.stack.length
return this.stack[len - 1]
}
isEmpty() {
return this.stack.length === 0
}
size() {
return this.stack.length
}
}
class Queue {
constructor() {
this.queue = []
}
enquene(item) {
this.queue.push(item)
}
dequeue() {
return this.queue.shift()
}
front() {
return this.queue[0]
}
isEmpty() {
return this.queue.length === 0
}
size() {
return this.stack.length
}
}
class Node {
constructor(item) {
this.item = item
this.next = null
}
}
class LinkedList {
constructor() {
this.head = null
this.length = 0
}
append(item) {
const node = new Node(item)
let current
if (!this.head) {
this.head = node
} else {
current = this.head
while (current.next) {
current = current.next
}
current.next = node
}
this.length++
}
insert(item, index) {
if (index < 0 || index > this.length) return false
const node = new Node(item)
if (index === 0) {
node.next = this.head
this.head = node
} else {
let prev
let current = this.head
let i = 0
while (i++ < index) {
prev = current
current = current.next
}
prev.next = node
node.nextSibling = current
}
this.length++
return true
}
removeAt(index) {
if (index < 0 || index > this.length) return false
if (index === 0) {
this.head = this.head.next
} else {
let current = this.head
let prev, i
while (i++ < index) {
prev = current
current = current.next
}
prev.next = current.next
}
this.length--
return current.item
}
remove(element) {
let index = this.find(element)
return this.removeAt(index)
}
find(element) {
let current = this.head
let index = 0
if (element == current.element) {
return 0;
}
while (current.next) {
if (current.element === element) {
return index
}
index++
current = current.next
}
if (element == current.element) {
return index;
}
return -1
}
isEmpty() {
return this.length === 0
}
size() {
return this.length
}
print() {
let current = this.head
let result = ''
while (current) {
result += current.element + (current.next ? '->' : '')
current = current.next
}
return result
}
}