この解答例はChatGPTによって生成されています,正しいかは自己判断で。
BFE.devでのAI解答例 - JavaScript コーディング問題
108. QueueでStack を実装する
以下はJavaScriptの class
構文を使った回答例です。
class Stack {
constructor() {
this.queue = new Queue();
}
push(element) {
this.queue.enqueue(element);
}
pop() {
const size = this.size();
for (let i = 0; i < size - 1; i++) {
// size - 1 回だけキューの先頭要素をキューの末尾に移動
this.queue.enqueue(this.queue.dequeue());
}
// キューの末尾の要素がトップ要素になる
return this.queue.dequeue();
}
peek() {
const size = this.size();
for (let i = 0; i < size - 1; i++) {
// size - 1 回だけキューの先頭要素をキューの末尾に移動
this.queue.enqueue(this.queue.dequeue());
}
// キューの末尾の要素がトップ要素になる
const topEl = this.queue.peek();
// トップ要素を取得したあとにキューに追加することで元の形に戻す
this.queue.enqueue(this.queue.dequeue());
return topEl;
}
size() {
return this.queue.size();
}
}
class Queue {
constructor() {
this.head = null;
this.tail = null;
this.count = 0;
}
enqueue(element) {
const newNode = new Node(element);
if (!this.head) {
this.head = newNode;
this.tail = newNode;
} else {
this.tail.next = newNode;
this.tail = newNode;
}
this.count++;
}
dequeue() {
if (!this.head) {
return null;
}
const dequeuedEl = this.head.value;
this.head = this.head.next;
this.count--;
return dequeuedEl;
}
peek() {
if (!this.head) {
return null;
}
return this.head.value;
}
size() {
return this.count;
}
}
class Node {
constructor(value) {
this.value = value;
this.next = null;
}
}
Stack
クラスでは、Queue を使って要素の追加と取り出しを行います。
pop()
, peek()
メソッドでは、キューの先頭の要素を末尾にまで移動させて、トップ要素を取り出しています。
この操作によって、キューの先頭が常にトップ要素になるようにしています。
Queue
クラスでは、単方向リストを使って実装しています。