根据栈的性质:先进后出。我们可以用它来实现一些需要前后比较的情况。
题型一:
回文链表

思路:先把链表遍历一遍,把数据都压入栈。然后再把数据一个个出栈与链表从头开始比较。全部相同则说明是回文链表。
有效的括号

思路:利用栈先进后出的特性来判断是否以正确的顺序闭合
var isValid = function(s) {const n = s.length;if (n % 2 === 1) {return false;}const pairs = new Map([[')', '('],[']', '['],['}', '{'] //每个对应的key和value,方便寻找对应的符号]);const stk = [];for (let ch of s){if (pairs.has(ch)) {if (!stk.length || stk[stk.length - 1] !== pairs.get(ch)) {return false;}stk.pop();}else {stk.push(ch);}};return !stk.length;};
用栈实现队列

思路:
队列是FIFO,先进先出,栈是LIFO,后进先出。所以我们设立两个栈,一个用于记录输入,一个用于帮助输出。
当需要输出时,我们将输入栈的内容从前往后压入输出栈,此时输入栈前面变成了输出栈后面的。输出栈后面的就后出,即为实现了先进后出,也就是后进先出。
var MyQueue = function() {this.inStock = [];this.outStock = [];};/*** @param {number} x* @return {void}*/MyQueue.prototype.push = function(x) {this.inStock.push(x);};/*** @return {number}*/MyQueue.prototype.pop = function() {if(!this.outStock.length){this.swap();}return this.outStock.pop();};/*** @return {number}*/MyQueue.prototype.peek = function() {if(!this.outStock.length){this.swap();}return this.outStock[this.outStock.length-1];};/*** @return {boolean}*/MyQueue.prototype.empty = function() {return !this.inStock.length && !this.outStock.length;};MyQueue.prototype.swap = function() {while(this.inStock.length){this.outStock.push(this.inStock.pop());}}
