2017-08-13 18 views
-4

我學習數據結構模塊,我已經從書上寫我的鏈接列表的代碼。當我運行代碼時,它只是追加一個節點,並在調用displayNode函數時僅顯示第一個節點的值。 請幫我解決一下我的代碼?在C++中我的鏈接列表的代碼只有一個附加價值

下面是代碼: 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(){} 

主要功能:

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

    NumberList list; 

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

    return 0; 
} 
+0

通過您的代碼行與調試器步進當行什麼你有沒有注意到? – user0042

+0

displayNode的輸出只是第一個值。 –

回答

0

想想非常仔細思考你有通過列表加緊尋找,你的代碼可以附加新的價值,尤其是循環體中的最後一行:

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

是通過一個調試器,你實際上單步執行代碼,檢查每個語句後的名單,你會立即看到這個問題。

相關問題