Les deux listes liées sont inversées, c'est-à-dire que le pointeur de queue de l'autre table de chaîne liée est inversé à partir de la fusion à partir du pointeur de queue d'une liste liée à l'autre liste liée. Ci-dessous, l'idée et le code d'implémentation de l'alternance d'inversion des deux listes liées sont introduites en détail.
1. Description du problème
Liens A et B
A: 1-> 2-> 3-> 4
B: a-> b-> c-> d
Veuillez inverser la liste des deux liens.
4-> d-> 3-> c-> 2-> b-> 1-> a
La définition du type de nœud est la suivante:
ClassNode {Node public Suivant; ... 2. Code source:
Deux listes liées A et B sont ramenées à la liste liée après le traitement:
Node Reverse_Merge (Node a, nœud b) {// a, b a un seul nœud if (a.next == null) {a.next = b; . ; Trois, analyse:
Le programme est divisé en trois parties - avant le cycle de temps, le cycle while et le cycle while.
1) Traitement de la liste liée précédente A et B
2) Alors que le cycle - la partie de traitement du noyau du processus de traitement peut être répétée ici.
Cependant, le nœud où A est situé dans A. Spécialement traité uniquement pour le nœud où A est situé, une opération NEXT = NULL est requise, ce qui signifie que le premier atome de 1 doit être mis en œuvre en dehors du cycle.
Si vous utilisez la méthode 2, vous n'avez qu'à mettre 1 doigt sur un cycle hors du cycle. Par conséquent, la structure atomique décrite dans 2 est utilisée ici.
Informations requises par la structure atomique
Lorsque nous allons à un certain cycle, en supposant le fonctionnement du cercle bleu, pour le moment, l'état de notre liste liée est:
La méthode de dessin plus intuitive est:
Il implique 3 nœuds -2,3 et C. La partie rouge est la méthode de liaison que nous voulons faire. Afin de relier C-> 2,3-> c, nous devons savoir qu'il existe des pointeurs correspondants pour enregistrer leur position. Par conséquent, avant le cycle, nous devons maîtriser l'adresse de ces trois éléments, et après le traitement, de la même manière, la structure atomique qui doit être traitée de la même manière.
Par exemple, la méthode suivante enregistre l'adresse des trois nœuds conçus dans ce cycle:
A, Na et B représentent le pointeur ou la référence aux nœuds correspondants.
Une fois le traitement terminé, vous devez enregistrer les nœuds impliqués dans la structure atomique suivante de la même manière, afin de vous assurer que le cycle peut être exécuté en fonction de la logique unifiée.
Ces opérations d'affectation sont exactement ce que le code du cycle fait. De plus, NextB est défini comme une variable intermédiaire dans le code pour enregistrer l'adresse du nœud D précédent avant que le C-> D ne déconnecte, car le C à 2 perdra le contact D. Cette variable intermédiaire est nécessaire.
3) Avant la boucle entière - Solve le problème amené par l'opération préparatoire
Nous n'avons pas géré de nœud A, car il est trop spécial, et il n'y a pas de structure atomique appropriée qui peut l'inclure. Nous le mettons donc en dehors du cycle et nous préparons à la circulation.
Après cela, nous pouvons mettre 1, 2 et B dans le cycle. Ici, il n'y a qu'un seul nœud A et B, qui doit également être traité séparément.
4) Après toute la boucle - le traitement final
Lorsque nous constatons que la liste liée B atteint la fin, le cycle est terminé. Mais à ce moment, il y a un nœud de manipulation. Notre cycle s'arrêtera dans cette structure atomique:
En tant qu'opération finale, nous devons traiter manuellement les étapes de liaison de D-> 3,4-> d-Ce n'est pas non plus une question, car le traitement de la structure atomique doit être trouvé.
Ce n'est pas une manière complète, et il y a beaucoup de choses qui n'ont pas été traitées. De plus, la structure des données du nœud n'est pas complètement définie, mais ce n'est pas au centre de cet article.
Grâce à l'analyse détaillée ci-dessus, j'espère aider tout le monde à comprendre les méthodes et la mise en œuvre des deux fusions alternatives liées.