You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					69 lines
				
				949 B
			
		
		
			
		
	
	
					69 lines
				
				949 B
			| 
											3 years ago
										 | class Node { | ||
|  | 	/// value;
 | ||
|  | 	/// next;
 | ||
|  | 
 | ||
|  | 	constructor(value) { | ||
|  | 		this.value = value; | ||
|  | 
 | ||
|  | 		// TODO: Remove this when targeting Node.js 12.
 | ||
|  | 		this.next = undefined; | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | class Queue { | ||
|  | 	// TODO: Use private class fields when targeting Node.js 12.
 | ||
|  | 	// #_head;
 | ||
|  | 	// #_tail;
 | ||
|  | 	// #_size;
 | ||
|  | 
 | ||
|  | 	constructor() { | ||
|  | 		this.clear(); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	enqueue(value) { | ||
|  | 		const node = new Node(value); | ||
|  | 
 | ||
|  | 		if (this._head) { | ||
|  | 			this._tail.next = node; | ||
|  | 			this._tail = node; | ||
|  | 		} else { | ||
|  | 			this._head = node; | ||
|  | 			this._tail = node; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		this._size++; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	dequeue() { | ||
|  | 		const current = this._head; | ||
|  | 		if (!current) { | ||
|  | 			return; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		this._head = this._head.next; | ||
|  | 		this._size--; | ||
|  | 		return current.value; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	clear() { | ||
|  | 		this._head = undefined; | ||
|  | 		this._tail = undefined; | ||
|  | 		this._size = 0; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	get size() { | ||
|  | 		return this._size; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	* [Symbol.iterator]() { | ||
|  | 		let current = this._head; | ||
|  | 
 | ||
|  | 		while (current) { | ||
|  | 			yield current.value; | ||
|  | 			current = current.next; | ||
|  | 		} | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | module.exports = Queue; |