2017-08-13 2 views
-4

J'étudie le module de structure de données et j'ai mon code de liste lié écrit à partir du livre. Pendant que j'exécute le code, il suffit d'ajouter un nœud et, lors de l'appel de la fonction displayNode, il affiche uniquement la valeur du premier nœud. s'il vous plaît aidez-moi quoi réparer dans mon code?Mon code de liste lié en C++ ajoute seulement une valeur

Voici le code: fichier class.h

NumberList::NumberList(){ 
     head=nullptr; 
} 

void NumberList::appendNode(double num){ 

    ListNode *newNode; 
    ListNode *nodeptr; 

    newNode=new ListNode; 
    newNode->value=num; 
    newNode->next=nullptr; 

    if(!head){ 
     head=newNode; 
    } 
    else{ 
     nodeptr=head; 
     while(nodeptr->next){ 
      nodeptr=nodeptr->next; 

      nodeptr->next=newNode; 

     } 
    } 
} 

    void NumberList::insertNode(double num){ 
    ListNode *newNode; 
    ListNode *nodeptr; 
    ListNode *previousNode; 
    newNode=new ListNode; 
    newNode->value=num; 
    if(!head){ 
     head=newNode; 
     newNode->next=nullptr; 
    } 
    else{ 
     nodeptr=head; 
     previousNode=nullptr; 
     while(nodeptr!=nullptr&&nodeptr->value<num){ 
      previousNode=nodeptr; 
      nodeptr=nodeptr->next; 
     } 
     if(previousNode==NULL){ 
      previousNode=newNode; 
      newNode->next=nodeptr; 
     } 
     else{ 
      previousNode=newNode; 
      newNode->next=nodeptr; 
     } 
    } 
} 

void NumberList::DeleteNode(double num){ 

    ListNode *nodeptr; 
    ListNode *previousNode = nullptr; 
    if(!head){ 
     return; 
    } 

    if(head->value==num){ 
     nodeptr=head->next; 
     delete head; 
     head=nodeptr; 
    } 
    else{ 
     nodeptr=head; 
     while(nodeptr!=NULL&&nodeptr->value!=num){ 
      previousNode=nodeptr; 
      nodeptr=nodeptr->next; 
     } 
     if(nodeptr){ 
      previousNode->next=nodeptr->next; 
      delete nodeptr; 
     } 


    } 

} 

    void NumberList::DisplayNode()const{ 
     ListNode *nodeptr; 
     nodeptr=head; 
     while(nodeptr){ 
      cout<<nodeptr->value<<endl; 
      nodeptr=nodeptr->next; 
     } 
    } 

NumberList::~NumberList(){} 

fonction principale:

int main(int argc, const char * argv[]) { 

    NumberList list; 

    list.appendNode(0.9); 
    list.appendNode(13.9); 
    list.DisplayNode(); 

    return 0; 
} 
+0

Qu'avez-vous observé en parcourant votre code ligne par ligne avec le débogueur? – user0042

+0

La sortie de displayNode est seulement la première valeur. –

Répondre

0

très Pensez soigneusement sur le code que vous avez pour marcher dans la liste à la recherche d'où vous pouvez ajouter votre nouvelle valeur, en particulier la dernière ligne à l'intérieur de ce corps de boucle:

while(nodeptr->next){ 
    nodeptr=nodeptr->next; 
    nodeptr->next=newNode; 
} 

Si vous exécutiez votre code à l'aide d'un débogueur, en examinant la liste après chaque instruction, vous verriez le problème instantanément.