【刷算法】用两个栈完成行列

问题形貌

用两个栈来完成一个行列,完成行列的Push和Pop操纵。 行列中的元素为int范例。

剖析

两个栈完成行列,那就是一个进一个出,且题中没说两个栈的长度限定,那末关于两个栈s1和s2来讲,有两个注重的点:

  • s1.push时,若s2不为空且s1为空,为了保证准确的递次,则将s2的元素全返入s1,然后再s1.push
  • s2.pop时,若s2为空且s1不为空,为了保证准确的递次,则将s1的元素全放入s2,然后再s2.pop

代码完成

var s1 = [], s2 = [];
function transferStack(a, b) {
    while(a.length !== 0){
        b.push(a.pop());
    }
}
function push(val) {
    if(s1.length === 0 && s2.length !== 0){
        transferStack(s2, s1);
    }

    s1.push(val);
}

function pop(){
    if(s1.length !== 0 && s2.length === 0){
        transferStack(s1, s2);
    }

    return s2.pop();
}
    原文作者:亚古
    原文地址: https://segmentfault.com/a/1190000015712347
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞