int main {
struct ListNode {
les données int ;
jambe ListNode * prev ;
jambe ListNode * suivant ;
};
return 0; }
" ListNode struct " bloc de code crée un modèle pour les articles qui vont peupler la liste. Ce modèle définit un ListNode comme contenant trois éléments: un élément de données (un entier) et des pointeurs vers les articles précédents et suivants de la liste. Un pointeur est une variable qui contient une adresse de mémoire . Les pointeurs sont utilisés pour se référer à d'autres structures de données en mémoire profonde et d'allouer dynamiquement de la mémoire lors de l'exécution de code.
2
déclarer les variables qui vont organiser la structure de liste . Insérer cet exemple de code dans le fichier texte:
taille de int;
ListNode * tête ;
ListNode * queue;
queue = tête ; < br >
tête = queue ;
Ces deux indicateurs sont le début et la fin de la liste , respectivement. L'utilisation de ces pointeurs , le programmeur sait où le début de la liste et où la fin est tout simplement en vérifiant si le noeud courant est le «chef» ou le pointeur de "queue " . Ils ont tous deux renvoient les uns aux autres dans le cas d' une liste vide.
3
Créer un algorithme simple pour ajouter des éléments de la liste chaînée . Suivez cet exemple de code :
vide append ( int num) {
struct ListNode * traceur = tête ;
struct ListNode * newNode = (struct ListNode *) malloc ( sizeof (struct ListNode ) ) ;
newNode -> data = num ;
if ( tête == null) {
tête de
= newNode ;
queue = newNode ;
newNode -> prev = tête ;
newNode - > suivant = queue;
} else {
tout (traceur - > suivant = queue! )
{ = traceur traceur - > suivant ; }
newNode -> prev = traceur;
newNode - > suivant = queue;
traceur - > suivant = noeud;
queue = noeud;
}
taille
+ +;
}
Ce code ajoute un nœud à la fin de la liste . Il commence par créer un pointeur vers la tête de la liste ( «traceur» ) . Ensuite , il crée un pointeur vers un bloc de mémoire alloué dynamiquement mis de côté pour un ListNode nouvellement créée ( newNode ) et établit les données de ce noeud à l'entier " num" . Si les points de la tête à NULL ( la liste est vide , parce que les points de la tête à rien ), puis le code insère le nœud au début de la liste. Sinon, les "while" cycles de boucle à travers les nœuds de la liste jusqu'à atteindre le dernier nœud. Lorsque «traceur» pointe vers le dernier élément de la liste, le code insère le nœud . La dernière commande ajoute à l'entier «taille» , en gardant une trace des éléments de la liste
4
Créer un algorithme pour supprimer et produit à partir de la fin de la liste: .
vide removeNode () {
if ( queue = tête! ) {
struct ListNode * Fin = queue;
queue = queue -> prev ;
< p> libre ( fin ) ;
taille
- ;
} }
Ce code crée un pointeur ( «fin» ) à la dernière élément de la liste ( les éléments mêmes "queue" souligne ) . Ensuite , la queue est réglé pour pointer vers l'élément juste avant le dernier élément ( le noeud pointé par le pointeur " prev" du dernier élément ) . Enfin, la mémoire utilisée par dernier noeud , désigné par «fin» , est libéré pour une utilisation ultérieure .