| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 | /** * // This is the interface that allows for creating nested lists. * // You should not implement it, or speculate about its implementation * function NestedInteger() { * *     Return true if this NestedInteger holds a single integer, rather than a nested list. *     @return {boolean} *     this.isInteger = function() { *         ... *     }; * *     Return the single integer that this NestedInteger holds, if it holds a single integer *     Return null if this NestedInteger holds a nested list *     @return {integer} *     this.getInteger = function() { *         ... *     }; * *     Return the nested list that this NestedInteger holds, if it holds a nested list *     Return null if this NestedInteger holds a single integer *     @return {NestedInteger[]} *     this.getList = function() { *         ... *     }; * }; */Array.prototype.peek = function() {    return this[this.length - 1]}/** * @constructor * @param {NestedInteger[]} nestedList */var NestedIterator = function(nestedList) {	this.st = [nestedList]	this.idx = [0]	this.findNext()}/** * @this NestedIterator * @returns {boolean} */NestedIterator.prototype.hasNext = function() {	return this.idx.length !== 0}/** * @this NestedIterator * @returns {integer} */NestedIterator.prototype.next = function() {	let val = this.st.peek()[this.idx.peek()].getInteger()	this.idx[this.idx.length-1]++	this.findNext()	return val}NestedIterator.prototype.findNext = function() {	while (this.idx.length !== 0) {		if (this.idx.peek() == this.st.peek().length) { // Out of bound			this.idx.pop()			this.st.pop()			if (this.st.length !== 0) {				this.idx[this.idx.length-1]++			}		} else if (!this.st.peek()[this.idx.peek()].isInteger()) { // Go into list			this.st.push(this.st.peek()[this.idx.peek()].getList())			this.idx.push(0)		} else { // Found			break		}	}}/** * Your NestedIterator will be called like this: * var i = new NestedIterator(nestedList), a = []; * while (i.hasNext()) a.push(i.next());*/
 |