


Programme JavaScript pour échanger des nœuds dans une liste chaînée sans échanger de données
Le programme JavaScript permettant d'échanger des nœuds dans une liste chaînée sans échanger de données est un problème courant dans le développement Web qui implique de réorganiser l'ordre des nœuds dans une liste chaînée. Une liste chaînée est une structure de données composée de nœuds, chaque nœud contenant une donnée et une référence au nœud suivant dans la liste.
Dans cet article, nous apprendrons un tutoriel complet sur l'échange de nœuds dans une liste chaînée sans échanger de données à l'aide de JavaScript. Définissons donc d’abord le nœud d’échange, puis poursuivons le didacticiel. Alors continuez à apprendre !
Nœud d'échange
Échanger des nœuds dans une liste chaînée signifie que nous échangeons les positions de deux nœuds. Il existe de nombreuses façons d'échanger des nœuds dans une liste chaînée. Une approche consiste à échanger des données entre les nœuds, mais cela peut s'avérer inefficace lorsqu'il s'agit de grandes quantités de données. Une autre approche consiste à échanger des pointeurs vers des nœuds. C'est plus efficace car nous n'avons pas besoin de copier de données.
Comprenons le nœud d'échange à travers un exemple
Exemple
Supposons que nous ayons une liste chaînée comme ci-dessous -
1 -> 2 -> 3 -> 4 -> 5
Nous voulons échanger les deuxième et quatrième nœuds pour obtenir :
1 -> 4 -> 3 -> 2 -> 5
Pour y parvenir sans échanger de données dans les nœuds, nous devons modifier les liens entre les nœuds. La liste chaînée résultante doit contenir les mêmes données que la liste chaînée d'origine, mais l'ordre des nœuds a changé.
Donc, nous identifions d'abord les deux nœuds à échanger : le nœud 2 et le nœud 4. Nous devons également garder une trace des nœuds avant et après ces nœuds dans la liste.
Dans cet exemple, les nœuds avant et après le nœud 2 sont respectivement 1 et 3. Les nœuds avant et après le nœud 4 sont respectivement 3 et 5.
Ensuite, nous devons mettre à jour les liens entre les nœuds. Nous définissons d’abord le pointeur suivant du nœud avant le nœud 2 sur le nœud 4. Nous plaçons ensuite le pointeur suivant du nœud 2 sur le nœud 5 (puisque le nœud 4 est maintenant derrière le nœud 2). Enfin, nous plaçons le pointeur suivant du nœud 4 sur le nœud 3 (puisque le nœud 2 est maintenant derrière le nœud 4).
La liste de liens générée ressemble à ceci -
1 -> 4 -> 3 -> 2 -> 5
Remarque - Les données de chaque nœud ne changent pas, juste l'ordre des nœuds.
Regardons maintenant l'algorithme que nous utiliserons pour échanger des nœuds dans une liste chaînée sans échanger de données.
Algorithme
ÉTAPE 1 : Identifiez les deux nœuds qui doivent être échangés
La première étape consiste à identifier les deux nœuds qui doivent être échangés. Supposons que nous voulions échanger le nœud A et le nœud B.
Étape 2 : Trouvez le nœud précédent des deux nœuds à échanger
Nous devons trouver les nœuds avant les nœuds A et B dans la liste chaînée. Nous appelons respectivement ces nœuds PrevA et PrevB.
Étape 3 : Mettez à jour le pointeur suivant du nœud précédent pour pointer vers un autre nœud
Maintenant, nous devons mettre à jour les prochains pointeurs de PrevA et PrevB pour pointer vers les bons nœuds. Cela implique de mettre à jour le pointeur suivant de PrevA pour pointer vers le nœud B et de mettre à jour le pointeur suivant de PrevB pour pointer vers le nœud A.
Étape 4 : Mettez à jour le pointeur suivant du nœud à échanger afin qu'il pointe vers le bon nœud
Ensuite, nous devons mettre à jour les prochains pointeurs des nœuds A et B pour pointer vers les nœuds corrects. Cela implique de mettre à jour le pointeur suivant du nœud A pour pointer vers le nœud situé à côté du nœud B, et de mettre à jour le pointeur suivant du nœud B pour pointer vers le nœud situé à côté du nœud A.
Étape 5 : Répétez les étapes ci-dessus pour tous les autres nœuds qui doivent être échangés
Si nous devons échanger plus de deux nœuds, nous pouvons répéter les étapes ci-dessus pour chaque paire de nœuds qui doivent être échangés.
Après avoir terminé ces étapes, les nœuds de la liste chaînée seront échangés, mais pas leurs données. Comprenons maintenant l'algorithme ci-dessus avec un exemple de son implémentation en utilisant Javascript.
Exemple
Dans ce programme, nous définissons d'abord une classe "Node" pour créer les nœuds de la liste chaînée, et définissons une classe "LinkedList" pour créer et exploiter la liste chaînée. La fonction "swapNodes" de la classe "LinkedList" implémente l'algorithme de swap décrit précédemment.
// Define a Node class to create nodes of linked list class Node { constructor(data) { this.data = data; this.next = null; } } // Define a LinkedList class to create and manipulate the linked list class LinkedList { constructor() { this.head = null; } // Function to swap two nodes in the linked list swapNodes(node1, node2) { // If both nodes are the same, no need to swap if (node1 === node2) { return; } // Find the previous nodes of both nodes to be swapped let prevNode1 = null; let currentNode1 = this.head; while (currentNode1 && currentNode1 !== node1) { prevNode1 = currentNode1; currentNode1 = currentNode1.next; } let prevNode2 = null; let currentNode2 = this.head; while (currentNode2 && currentNode2 !== node2) { prevNode2 = currentNode2; currentNode2 = currentNode2.next; } // If either node1 or node2 is not found, return if (!currentNode1 || !currentNode2) { return; } // Update the next pointers of the previous nodes to point to the other node if (prevNode1) { prevNode1.next = currentNode2; } else { this.head = currentNode2; } if (prevNode2) { prevNode2.next = currentNode1; } else { this.head = currentNode1; } // Swap the next pointers of the nodes to be swapped to point to the correct nodes let temp = currentNode1.next; currentNode1.next = currentNode2.next; currentNode2.next = temp; // Print the swapped linked list console.log("Swapped linked list:"); let current = this.head; while (current) { process.stdout.write(current.data + " -> "); current = current.next; } console.log("null"); } // Function to add a Node at the end of the linked list addNode(data) { let node = new Node(data); if (!this.head) { this.head = node; } else { let current = this.head; while (current.next) { current = current.next; } current.next = node; } } } // Create a linked list let linkedList = new LinkedList(); linkedList.addNode(1); linkedList.addNode(2); linkedList.addNode(3); linkedList.addNode(4); // Print the original linked list console.log("Original linked list:"); let current = linkedList.head; while (current) { process.stdout.write(current.data + " -> "); current = current.next; } console.log("null"); // Swap node 2 and node 4 let node2 = linkedList.head.next; let node4 = linkedList.head.next.next.next; linkedList.swapNodes(node2, node4);
Conclusion
Dans ce tutoriel, nous montrons un programme JavaScript qui implémente cet algorithme, qui échange avec succès les nœuds d'une liste chaînée sans échanger leurs données. J'espère que cela aidera nos lecteurs. Bon apprentissage !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

L'article discute de la création, de la publication et du maintien des bibliothèques JavaScript, en se concentrant sur la planification, le développement, les tests, la documentation et les stratégies de promotion.

L'article traite des stratégies pour optimiser les performances JavaScript dans les navigateurs, en nous concentrant sur la réduction du temps d'exécution et la minimisation de l'impact sur la vitesse de chargement de la page.

Des questions et des solutions fréquemment posées pour l'impression de billets thermiques frontaux pour le développement frontal, l'impression de billets est une exigence commune. Cependant, de nombreux développeurs mettent en œuvre ...

L'article traite du débogage efficace de JavaScript à l'aide d'outils de développeur de navigateur, de se concentrer sur la définition des points d'arrêt, de l'utilisation de la console et d'analyser les performances.

Il n'y a pas de salaire absolu pour les développeurs Python et JavaScript, selon les compétences et les besoins de l'industrie. 1. Python peut être davantage payé en science des données et en apprentissage automatique. 2. JavaScript a une grande demande dans le développement frontal et complet, et son salaire est également considérable. 3. Les facteurs d'influence comprennent l'expérience, la localisation géographique, la taille de l'entreprise et les compétences spécifiques.

L'article explique comment utiliser les cartes source pour déboguer JavaScript minifiée en le mappant au code d'origine. Il discute de l'activation des cartes source, de la définition de points d'arrêt et de l'utilisation d'outils comme Chrome Devtools et WebPack.

Ce tutoriel expliquera comment créer des graphiques à tarte, anneaux et bulles à l'aide de chart.js. Auparavant, nous avons appris quatre types de graphiques de graphique. Créer des graphiques à tarte et à anneaux Les graphiques à tarte et les graphiques d'anneaux sont idéaux pour montrer les proportions d'un tout divisé en différentes parties. Par exemple, un graphique à secteurs peut être utilisé pour montrer le pourcentage de lions mâles, de lions féminins et de jeunes lions dans un safari, ou le pourcentage de votes que différents candidats reçoivent lors des élections. Les graphiques à tarte ne conviennent que pour comparer des paramètres ou des ensembles de données uniques. Il convient de noter que le graphique à tarte ne peut pas dessiner des entités avec une valeur nulle car l'angle du ventilateur dans le graphique à tarte dépend de la taille numérique du point de données. Cela signifie toute entité avec une proportion nulle

Discussion approfondie des causes profondes de la différence de sortie Console.log. Cet article analysera les différences dans les résultats de sortie de la fonction Console.log dans un morceau de code et expliquera les raisons derrière. � ...
