Articles

Liste chaînée unique en JavaScript

Pour avoir une compréhension claire de la liste chaînée unique, je vais implémenter la classe LinkedList en JavaScript.

Chaque nœud de la liste chaînée aura deux attributs : value &suivant, et la liste chaînée aura des attributs head, tail et length.

https://gist.github.com/GAierken/eb9583bc1ffa78b8e1bb7438a7a49014

Push

Comment pouvons-nous pousser un nouveau nœud à la fin de notre liste? Faisons une fonction push. Tout d’abord, nous devons créer un nouveau nœud en utilisant la valeur donnée, vérifier si la liste a une tête (est-elle vide?) et n’oubliez pas d’incrémenter la taille de la liste.

https://gist.github.com/GAierken/4e44162c8fefe746680e67ea65bf9397

Pop

En poussant, nous devons penser à éclater, en supprimant le dernier élément. S’il n’y a pas de nœud, retournez undefined, else, parcourez la liste jusqu’à ce que nous atteignions la queue, définissez la propriété suivante de l’avant-dernier nœud sur null, faites en sorte que l’avant-dernier soit la queue, n’oubliez pas de décrémenter la taille de la liste.

https://gist.github.com/GAierken/2c24fecb26f7453879ab471190fcba1e

Shift

Pour supprimer le premier élément, décaler, comme d’habitude, vérifiez si la liste est vide. Tout d’abord, stockez la tête actuelle dans une variable, définissez la tête pour qu’elle soit la suivante de la tête actuelle, décrémentez la longueur.

https://gist.github.com/GAierken/e6a11cdaf63d9620db33cef58d0a9507

Unshift

Pour insérer un nœud au début de la liste, vérifiez si la liste est vide, sinon, nous définissons la tête actuelle comme étant l’attribut suivant du nœud entrant, incrémente la taille.

https://gist.github.com/GAierken/95cbf790f1b6e03711f2460eb7951aa4

Get

Même si la liste chaînée n’a pas d’index, nous sommes toujours en mesure de trouver le nœud par index donné. Assurez-vous d’abord que l’index donné est supérieur à zéro et inférieur ou égal à la longueur de la liste. Que nous parcourons la liste jusqu’à ce que nous atteignions l’index.

https://gist.github.com/GAierken/6475bb388fe8b0f2b7f6507bb3cab446

Set

Que faire si nous voulons changer un nœud dans notre liste? Nous trouvons le nœud avec get() et définissons le nœud avec des données données.

https://gist.github.com/GAierken/e9b0bb11849219914e2b3ee7b215d5d2

Insert

Lorsque nous voulons insérer un nouveau nœud dans la liste, vérifiez d’abord si l’index est supérieur à 0 et inférieur à la longueur. Si index est la longueur, nous utilisons simplement push(), si l’index est 0, nous utilisons unshift(). Pour les autres index, nous devons obtenir le nœud à l’index-1, et définir la propriété suivante de ce nœud pour être le nouveau nœud, et la propriété suivante du nouveau nœud pour être la propriété suivante précédente, puis nous incrémentons la longueur.

https://gist.github.com/GAierken/08c88867ddb514de6ef4ddb3923a4117

Remove

Contrairement à pop et unshift, la fonction remove supprimera le nœud par index donné. Comme d’habitude, vérifiez si l’index est valide, si l’index est égal à la longueur – 1 ou 0, utilisez pop ou shift. Sinon, nous obtenons le nœud à l’index-1, définissons la propriété suivante sur ce nœud pour être la propriété suivante de la propriété suivante, après, nous décrétons la taille.

https://gist.github.com/GAierken/e888104f65a836925b11e102584edd76

Inverse

La question inverse ultime! Comment inverser la liste? Tout d’abord, nous échangeons la tête et la queue, déclarons suivant et précédent, définissons le précédent comme null. Nous parcourons la liste.

https://gist.github.com/GAierken/556c13f4ccbc5bcd49584bd662b553de