この解答例は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
クラスでは、単方向リストを使って実装しています。