2009-06-07 6 views
0
void push_front(const dataType &item) 
    { 
    head=new dnode<dataType> (item,NULL,head); 
    if (!empty()) 
     head->next->prev=head; 
    else 
     tail=head; 
    numItems++; 
    } 

J'ai un code ici, mais je ne le comprends pas vraiment, quelle est la ligne head->next->prev=head? quelqu'un pourrait-il expliquer s'il vous plaît, merciliste chaînée push front

+0

Je l'ai fait. Utilisez le bouton 10101 dans l'éditeur. –

+0

J'essaie aussi de corriger le formatage de ce code mais il semble que mes modifications et les vôtres s'affrontent ...! -) –

Répondre

1

Vraisemblablement head=new dnode<dataType> (item,NULL,head); définir la nouvelle head->next à la head précédente, alors head->next->prev=head; est la fixation du champ prev de ladite tête précédente (était précédemment NULL, est maintenant le HEW head).

13

Si la liste ressemble à ceci:

 *************** 
head->*Data: XXX * 
     *Prev: NULL * *************** 
     *Next: --------> * Data: YYY * 
     *************** <----Prev:  *  *************** 
         * Next: --------> * Data: ZZZ * 
         ***************<------Prev:  * 
              * Next: NULL * 
              *************** 

maintenant: Ajouter le nouvel élément

head = new dnode<dataType> (AAA,NULL,head); 


     *************** 
head->*Data: AAA * 
     *Prev: NULL * *************** 
     *Next: --------> * Data: XXX * 
     *************** * Prev: NULL *  *************** 
         * Next: --------> * Data: YYY * 
         ***************<------Prev:  *  *************** 
              * Next: --------> * Data: ZZZ * 
              ***************<------Prev:  * 
                   * Next: NULL * 
                   *************** 

Notez que le deuxième élément de la chaîne. Le membre Prev est toujours NULL. Donc, pour ajouter le lien du deuxième élément à la tête.

head->next->prev=head; 

     *************** 
head->*Data: AAA * 
     *Prev: NULL * *************** 
     *Next: --------> * Data: XXX * 
     ***************<-----Prev:  *  *************** 
         * Next: --------> * Data: YYY * 
         ***************<------Prev:  *  *************** 
              * Next: --------> * Data: ZZZ * 
              ***************<------Prev:  * 
                   * Next: NULL * 
                   *************** 

Ainsi, vous pouvez penser à la ligne:

head->next->prev=head; 

    // This is equivelant too: 

    oldHead  = head->next; 
    oldHead->prev = head; 
+0

ahh. cela est si utile, merci les gars –

+2

+1, Une image vaut mille mots –

Questions connexes