Las dos listas vinculadas se invierten, es decir, el puntero de cola de la otra tabla de cadena vinculada se invierte de la fusión de la lista de cola de una lista vinculada a la otra lista vinculada. A continuación, la idea y el código de implementación de la alternancia de inversión de las dos listas vinculadas se introducen en detalle.
1. Descripción del problema
Enlaces A y B
A: 1-> 2-> 3-> 4
B: a-> b-> c-> d
Invertir las dos listas vinculadas alternativamente.
4-> d-> 3-> c-> 2-> b-> 1-> a
La definición de tipo de nodo es la siguiente:
ClassNode {Public Node Next; 2. Código fuente:
Dos listas vinculadas A y B se vuelven a pasar a la lista vinculada después del procesamiento:
Nodo reverse_merge (nodo A, nodo B) {// a, b tiene solo un nodo si (a.next == null) {a.next = b; .Next; ; A.Next = B; Tres, Análisis:
El programa se divide en tres partes, antes del ciclo While, el ciclo While y el ciclo While.
1) Procesar la lista vinculada anterior A y B
2) Mientras que el ciclo: la parte de procesamiento del núcleo del proceso de procesamiento se puede repetir aquí.
Sin embargo, el nodo donde A se encuentra en A. especialmente procesado para el nodo donde se encuentra A, se requiere una operación siguiente = nula, lo que significa que el primer átomo en 1 debe implementarse fuera del ciclo apuntando a 1 operación.
Si usa el método 2, solo necesita poner 1 dedo a un ciclo. Por lo tanto, la estructura atómica descrita en 2 se usa aquí.
Información requerida por la estructura atómica
Cuando vamos a cierto ciclo, suponiendo la operación del Círculo Azul, en este momento, el estado de nuestra lista vinculada es:
El método de dibujo más intuitivo es:
Implica 3 nodos -2,3 y C. La parte roja es el método de enlace que queremos hacer. Para vincular c-> 2,3-> c, debemos saber que hay consejos correspondientes para registrar su posición. Por lo tanto, antes del ciclo, necesitamos dominar la dirección de estos tres elementos, y después del procesamiento, de la misma manera, la estructura atómica que debe procesarse de la misma manera.
Por ejemplo, el siguiente método registra la dirección de los tres nodos diseñados en este ciclo:
A, Na y B representan el puntero o referencia a los nodos correspondientes.
Una vez completado el procesamiento, debe registrar los nodos involucrados en la siguiente estructura atómica de la misma manera, para garantizar que el ciclo pueda ejecutarse de acuerdo con la lógica unificada.
Estas operaciones de asignación son exactamente lo que hace el código medio del cuerpo del ciclo. Además, NEXTB se define como una variable intermedia en el código para registrar la dirección del nodo D anterior antes de que C-> D se desconecte, porque la C a 2 perderá el contacto D. Esta variable intermedia es necesaria.
3) Antes de todo el bucle, solucione el problema traído por la operación preparatoria
No hemos manejado un nodo A, porque es demasiado especial, y no hay una estructura atómica adecuada que pueda incluirlo. Así que lo colocamos fuera del ciclo y nos preparamos para la circulación.
Después de eso, podemos poner 1, 2 y B en el ciclo. Aquí, solo hay un nodo A y B, que también debe procesarse por separado.
4) Después de todo el bucle, el procesamiento final
Cuando encontramos que la lista B Linked llega al final, el ciclo ha terminado. Pero en este momento, hay un nodo de manejo. Nuestro ciclo se detendrá en esta estructura atómica:
Como operación final, necesitamos procesar manualmente los pasos de enlace de D-> 3,4-> D-Esta tampoco es una manera, porque el tratamiento de la estructura atómica debe encontrarse.
Esta no es una forma completa, y hay muchas cosas que no se han procesado. Además, la estructura de datos del nodo no está completamente definida, pero este no es el foco de este artículo.
A través del análisis detallado anterior, espero ayudar a todos a comprender los métodos y la implementación de las dos fusiones alternativas de la lista vinculada.