Jianzhi Offer 09 implementa colas con dos pilas

Al principio, no entendí el significado de la pregunta cuando leí la pregunta, solo lo entendí después de ver la explicación vernácula en la solución.

Se deben investigar las características de la pila (primero en entrar, primero en salir) y la cola (primero en entrar, primero en salir).

Aquí hay dos pilas. Tengo entendido que la primera es la pila de funciones y la segunda es la pila auxiliar. De acuerdo con las características de la pila, se utilizan dos pilas para realizar la función de la cola.

Mi resumen personal es que, primero, los números se insertan en la primera pila. En este momento, la pila 1 está vacía y la pila 2 está vacía . Por ejemplo, ingrese los tres números de 1, 3 y 5 en secuencia. En este tiempo, la pila 1 y la pila 2 se muestran en la figura.

Si desea eliminar el elemento principal en este momento, es decir, el primer número ingresado: 1, entonces debe sacar los tres elementos de la pila 1 uno por uno (pop) y empujarlos a la pila 2 (push). esta vez, la pila 1 está vacía, la pila 2 no está vacía , de acuerdo con el principio de primero en entrar, último en salir, la pila 2 se vuelve como se muestra en la figura

            

Luego pop 1 (pop), para que se pueda realizar la eliminación del elemento principal

Por lo tanto, si se trata de implementar la adición de elementos, todos los elementos se colocan primero en la pila 1

Luego elimine el elemento para considerar la situación de la pila 2, porque para eliminar el elemento principal, primero se debe sacar el elemento de la pila 1 y luego empujarlo a la pila 2. En este momento, la pila 2 no está vacía, lo que indica que los elementos están todos en la pila 2, y la operación de eliminación puede ejecutarse directa y secuencialmente, y no se requiere ninguna consideración adicional.

De acuerdo con el significado de la pregunta, si las pilas 1 y 2 están vacías, la operación de eliminación devuelve -1

Luego considere la situación de la pila 1 y la pila 2

①, la pila 2 está vacía, la pila 1 no está vacía

En este caso, se empuja un nuevo elemento a la pila 1. En este momento, la situación de la pila 1 y la pila 2 se muestra en la figura.

Luego, el elemento principal en este momento se convierte en 7. Si desea eliminar 7, primero extraiga el elemento de la pila 2 y empújelo a la pila 1, y luego extraiga el elemento de la pila 1 y empújelo a la pila 2, luego 7 está en la parte superior de la pila 2, por lo que se puede implementar la operación de eliminación.

Los elementos de la pila 2 se abren y se empujan a la pila 1 a su vez:

Los elementos de la pila 1 se abren y se empujan a la pila 2 a su vez:

②, la pila 1 está vacía, la pila 2 no está vacía

Extraiga el elemento superior de la pila 2 directamente y elimínelo

En este punto, la solución de mis ideas personales ha terminado y el código está escrito de acuerdo con las ideas.

class CQueue {
    
    private Stack<Integer> stack1;
    private Stack<Integer> stack2;

    public CQueue() {
        stack1 = new Stack<>();
        stack2 = new Stack<>();
    }
    
    public void appendTail(int value) {
        stack1.push(value);
    }

    public int deleteHead() {
        // 栈2为空
        if (stack2.isEmpty()) {
            //栈2为空、栈1不为空
            while (!stack1.isEmpty()) {
                stack2.push(stack1.pop());
            }
        }
        //栈2空、栈1空
        if (stack2.isEmpty()) {
            return -1;
        } else { //栈2不空
            return stack2.pop();
        }
    }
}

isEmpty() determina si está vacío, devuelve verdadero si la pila está vacía y devuelve falso si la pila contiene elementos

Supongo que te gusta

Origin blog.csdn.net/Sean_Asu/article/details/122884577
Recomendado
Clasificación