2014-01-07 61 views
0

有人可以告訴我爲什麼我的主程序打印出9460301而不是350? 我只是試圖將一個結構作爲單個項插入到鏈表中。該結構具有a和c和y。然後我希望在我的鏈表中打印結構的x屬性。我寫了一個龐大的程序,我試圖在這篇文章中將其刪除,僅僅是爲了解這個已經出現的新問題。返回鏈接列表中的東西

我的塊結構和LinkedList類如下:

struct chunk{ 
    int x; 
    int y; 
}; 

template <class T> 
class linkedList 
{ 
public: 
    class node 
    { 
    public: 
     ///node class attributes 
     T mPayload; 
     node* mNext; 
     ///constructor 
     node(T toucan):mPayload(toucan),mNext(NULL) 
     {} 
     ///destructor 
     ~node() 
     { 
      ///cascading delete 
      if(mNext) 
       delete mNext; 
     } 
     ///node class methods 
    }; 

    ///linkedList class attributes 
    node* mStart; 
    ///constructor 
    linkedList():mStart(NULL) 
    {} 
    ///destructor 
    ~linkedList() 
    { 
     ///initializes the cascading delete. 
     if(mStart) 
      delete mStart; 
    } 
    ///linkedList class methods 
    T mReturnT(int indx) 
    { 
     if(!mStart) 
     { 
      T emptyList; 
      return emptyList; 
     } 
     else 
     { 
      node* cur; 
      for(int i = 0; i<indx+1; i++) 
      { 
       if(cur->mNext == NULL) 
       { 
        cout << "Indx out of range. Deleting last item." << endl; 
        break; 
       } 
       cur = cur->mNext; 
      } 
      return cur->mPayload; 
     } 
    } 

    void mInsertHelper(node* blah, T data) 
    { 
     if(blah->mNext != NULL) 
      mInsertHelper(blah->mNext, data); 
     else 
     { 
      blah->mNext = new node(data); 
      blah->mNext->mNext = NULL; 
     } 
    } 

    void mInsert(T data) 
    { 
     if(mStart == NULL) 
     { 
      mStart = new node(data); 
      //mStart->mPayload = data; 
     } 
     else 
      mInsertHelper(mStart, data); 
    } 

    T mPop() 
    { 
     ///Removes the last item in the list, 
     ///and returns it. 
     if(!mStart) 
      return NULL; 
     else 
     { 
      node* cur = mStart; 
      while(cur->mNext) 
      { 
       cur = cur->mNext; 
      } 
      T var = cur->mPayload; 
      delete cur; 
      return var; 
     } 
    } 

    int mSize() 
    { 
     if(!mStart) 
      return 0; 
     else 
     { 
      node* cur = mStart; 
      int counter = 1; 
      while(cur->mNext) 
      { 
       cur = cur->mNext; 
       counter++; 
      } 
      delete cur; 
      return counter; 
     } 
    } 

}; 

而且我的main.cpp:

int main() 
{ 
    chunk head; 
    head.x = 350; 
    head.y = 600; 
    linkedList<chunk> p1Snake; 
    p1Snake.mInsert(head); 

    cout<<p1Snake.mReturnT(0).x<<endl; 
} 
+0

這不符合三個規則。 – chris

回答

2

你從來沒有經歷過它的迭代之前初始化cur

node* cur;         // <-- UNINITIALISED! 
for(int i = 0; i<indx+1; i++) 
{ 
    if(cur->mNext == NULL) 
    { 
     cout << "Indx out of range. Deleting last item." << endl; 
     break; 
    } 
    cur = cur->mNext; 
} 
return cur->mPayload; 

也就是說第一行應該是:

node* cur = mStart; 

而且我認爲你應該在循環使用indx代替indx+1 ...除非你使用的是假人頭部方案,您不是。

用於檢測越界的循環內部邏輯也有點不對。如何改造整個事情:

node* cur = mStart; 
while(cur && indx > 0) { 
    cur = cur->mNext; 
    indx--; 
} 

if(!cur) { 
    cout << "Indx out of range." << endl; 
    return T(); 
} 

return cur->mPayload; 
+0

這非常有幫助! :)之前,我有indx + 1,因爲我不知道什麼是錯的,而我只是在試驗。 – DebrisHauler