2012-09-29 28 views
1

我將序言說這是我的第一個問題。我目前獲得信息安全碩士學位,並且本學期不得不參加C++程序設計。所以這是相關的作業。我不是在尋找你來回答我的功課,但我正陷入一個奇特的境地。我創建了這個程序來處理雙向鏈表,一切正常。但是,當我有用戶創建一個值列表第一個節點不斷返回0.我試圖找到一些閱讀這一點,我找不到任何參考。我的問題是,頭節點(第一個節點)總是會變爲零?或者我做錯了什麼。Double Linked List標題節點不斷返回第一個值爲0

case: 'C': 
cout<<"Please enter a list:"<<endl; 
    while(n!=-999){ 
    myList.insert(n); 
    cin>> n;} 
    break; 

我現在輸入:12321,1234,64564,346346。結果分別爲0,12321,1234,64564,346346。這是應該發生還是我做錯了什麼?同樣,因爲這是我的第一篇文章,請隨時批評或教我如何爲關鍵字添加顏色代碼。

無論如何,這是一項家庭作業,所以我只尋找指導和建設性的批評。

謝謝大家提前

所以我想不出在這個論壇的評論部分,所以我會修改原來的職位 第一部分是構造函數代碼:

template <class Type> 
doublyLinkedList<Type>::doublyLinkedList() 
    { 
    first= NULL; 
    last = NULL; 
    count = 0; 
     } 

再有就是我插入功能:

template <class Type> 
void doublyLinkedList<Type>::insert(const Type& insertItem) 
{ 
nodeType<Type> *current;  //pointer to traverse the list 
nodeType<Type> *trailCurrent; //pointer just before current 
nodeType<Type> *newNode;  //pointer to create a node 
bool found; 

newNode = new nodeType<Type>; //create the node 
newNode->info = insertItem; //store the new item in the node 
newNode->next = NULL; 
newNode->back = NULL; 

if(first == NULL) //if the list is empty, newNode is 
        //the only node 
{ 
    first = newNode; 
    last = newNode; 
    count++; 
} 
else 
{ 
    found = false; 
    current = first; 

    while (current != NULL && !found) //search the list 
     if (current->info >= insertItem) 
      found = true; 
     else 
     { 
      trailCurrent = current; 
      current = current->next; 
     } 

    if (current == first) //insert newNode before first 
    { 
     first->back = newNode; 
     newNode->next = first; 
     first = newNode; 
     count++; 
    } 
    else 
    { 
      //insert newNode between trailCurrent and current 
     if (current != NULL) 
     { 
      trailCurrent->next = newNode; 
      newNode->back = trailCurrent; 
      newNode->next = current; 
      current->back = newNode; 
     } 
     else 
     { 
      trailCurrent->next = newNode; 
      newNode->back = trailCurrent; 
      last = newNode; 
     } 

     count++; 
     }//end else 
    }//end else 
}//end 

然後,我有一個初始化函數太:

template <class Type> 
void doublyLinkedList<Type>::initializeList() 
{ 
    destroy(); 
} 

我錯過了什麼嗎?

+0

是的,着色很整齊,不是嗎!無論如何,請同時發佈您的雙向鏈接列表代碼。問題可能在那裏。 – John

+1

我相信@maniek明白了。第一次插入前是什麼'n'? – nullpotent

+0

「代碼」 模板 doublyLinkedList :: doublyLinkedList() – Craig

回答

5

您先插入,然後讀取輸入。

+0

'code' template Craig

+0

@Craig:這是正確的答案。它識別代碼中的邏輯錯誤。 –

1

只要你的代碼的內容,我相信曼尼克有正確的答案,所以請在他/她找到相同的東西時給他加分,並且不要這樣回答。這是克雷格理解如何重新排序他的循環,以便它讀取,測試,如果需要可以中斷,否則插入。

while (cin >> n && n != 999) 
    myList.insert(n); 

大約有十幾種方法可以用for-loop,do-while循環等來編寫代碼,但是這會讓你運行。 如果它解決了您的問題,請考慮提高投票的maniek的回答,標記綠色檢查(以及StackOverflow上提供您正在尋找的答案的任何其他答案)。

+0

在獲得正確答案之前,我需要15個聲望。我如何獲得更多的聲譽,因爲他是完全正確的 – Craig

+0

你做了足夠的標記爲​​綠色。最終你可以得到答案。你做得對。別擔心。 – WhozCraig

+0

太好了。我很高興今天這樣做了。我正在強調這一點。這很有趣,你如何在Sentinel中添加if語句。我可以詢問爲什麼開關是製造的。 – Craig