2013-07-24 68 views
0

我想打印一個鏈接列表。該程序如下:C++ - 鏈接列表不生成任何輸出

#include<iostream> 
#include<vector> 
using namespace std; 
class Link 
{ 
    public: 
     int iData; 
     double dData; 
     Link* pNext; 
     Link(int id,double dd) 
     { 
      iData = id; 
      dData = dd; 
     } 
     void displayLink() 
     { 
      cout<<"iData = "<<iData<<"\n"; 
      cout<<"dData = "<<dData<<"\n"; 
     } 
}; 
class OrderedList 
{ 
    private: 
     Link* pRoot; 
    public: 
     OrderedList() 
     { 
      pRoot = NULL; 
     } 
     void insert(int id,double dd) 
     { 
      Link* newlink = new Link(id,dd); 
      Link* pCurrent = pRoot; 
      Link* pPrev = pRoot; 
      while(pCurrent!=NULL&&pCurrent->iData<=id) 
      { 
       pPrev = pCurrent; 
       pCurrent = pCurrent->pNext; 
      } 
       newlink->pNext = pCurrent; 
      if(pCurrent==NULL) 
      { 
       pCurrent = newlink; 
      } 
      else 
      { 
       pPrev->pNext = newlink; 
      } 
     } 
     Link* search(int val) 
     { 
      Link* pCurrent = pRoot; 
      while(pCurrent!=NULL&&pCurrent->iData<val) 
      { 
       pCurrent = pCurrent->pNext; 
      } 
      return pCurrent; 
     } 
     bool remove(int val) 
     { 
      Link* pCurrent = pRoot; 
      Link* pPrev = pRoot; 
      while(pCurrent!=NULL&&pCurrent->iData<val) 
      { 
       pPrev = pCurrent; 
       pCurrent = pCurrent->pNext; 
      } 
      if(pCurrent==NULL) 
       return false; 
      else 
      { 
       Link* temp = pCurrent; 
       pPrev->pNext = pCurrent->pNext; 
       delete temp; 
       return true; 
      } 
     } 
     void displayList() 
     { 
      Link* pCurrent = pRoot; 
      while(pCurrent!=NULL) 
      { 
       pCurrent->displayLink(); 
       pCurrent = pCurrent->pNext; 
      } 
     } 
}; 
OrderedList ol; 
    ol.insert(10,10.10); 
    ol.insert(11,11.11); 
    ol.insert(12,12.12); 
    ol.insert(13,13.13); 
    ol.insert(14,14.14); 
    ol.insert(15,15.15); 
    ol.insert(16,16.16); 
    ol.insert(17,17.17); 
    ol.insert(18,18.18); 
    ol.insert(19,19.19); 
    ol.insert(20,20.20); 
    ol.insert(21,21.21); 
    ol.insert(22,22.22); 
    ol.insert(23,23.23); 
    ol.insert(24,24.24); 
    ol.insert(25,25.25); 
    ol.insert(26,26.26); 
    ol.insert(27,27.27); 
    ol.insert(28,28.28); 
    ol.insert(29,29.29); 
    ol.displayList(); 

我面臨的問題是,代碼看起來是正確的,並在紙上運行良好。當我嘗試在計算機上運行它時,它編譯時沒有任何錯誤。但是,執行它時,不顯示輸出。甚至沒有任何錯誤。該程序只是執行而不顯示任何東西。我無法指出問題所在。我認爲代碼很好。請幫我解決這個問題。

+0

看起來很好,你能否也提供調用函數的主體?可能是你的清單是空的... – etzourid

+0

恐怕這看起來好像不太好。 –

+0

pRoot如何變得不是NULL? – Jiminion

回答

1

OrderedList從來沒有將pRoot設置爲任何東西,除了在構造函數中將其設置爲NULL。因此insert()不會做任何事情(除了創建Link並泄漏它),並且displayList()的調用永遠不會進入while循環。 delete()也沒有工作,因爲它總是看到一個空的列表。

+0

但是我僅在創建OrderedList對象時將'pRoot'設置爲'NULL'。之後,當我插入一個元素時,我總是爲此創建一個新對象。只有在創建對象時不是'pRoot'' NULL'你能否詳細說明你的答案? – kusur

+1

'pRoot'應該是列表的頭部,對吧?當你迭代列表時,你從'pRoot'開始並從那裏開始。但'pRoot'總是'NULL' - 它從不指向任何東西,所以列表總是空的。正如@Jim在你的問題的評論中所說的,'insert()'需要通過設置'pRoot'指向新創建的節點來處理'pRoot'爲空的情況。 –

0

將pRoot分配給pCurrent,並使pCurrent指向新鏈接時,這不會更新pRoot。插入第一個節點時,必須更新pRoot以及pCurrent。