2017-08-13 9 views
-4

私はデータ構造モジュールを研究し、私はそのブックから書かれたリンクリストコードを持っています。私はコードを実行している間、それはちょうど1つのノードを追加し、displayNode関数を呼び出すと、最初のノードの値だけを表示します。 私のコードで何を修正するのを手伝ってください? class.hファイル私のリンクされたリストコードはC++で1つの値だけを追加しています

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(){} 

主な機能::

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

    NumberList list; 

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

    return 0; 
} 
+0

デバッガでコードを1行ずつステップ実行する際に、何を観察しましたか? – user0042

+0

displayNodeの出力は最初の値のみです。 –

答えて

0

はどこを探してリストをステップ実行のためのあなたが持っているコードについて慎重に非常にを考えてここ

コードです新しい値、特にそのループ本体の最後の行を追加することができます:

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

実際にコードをデバッガでシングルステップして、各ステートメントの後にリストを調べると、すぐに問題が表示されます。

関連する問題