2014-02-27 99 views
0

我試圖在鏈表中打印節點(轉發方向)。 它的定義如下:在C++中打印鏈表(C++ 98)

struct Node { 
    string val; 
    Node* next; 
    Node* prev; 
}; 

struct Stew { 
    Node* first; 
    Node* last; 
}; 

凡燉有兩個特殊的指針,一個指向第一個元素,一個到最後。

我很積極,我所嘗試的是正確的,但實際上並非如此。

void print (const Stew& q, char direction) { 
    assert (!isEmpty(q)); 
{ 
    Node* current = new Node; 

    current = q.first; 
    cout << current -> val; 

    while((current -> next) != NULL) 
    { 
     current = current -> next; 
     cout << (current -> val); 
    } 
    delete current; 
} 

我知道那裏有一個邏輯錯誤,但我似乎無法找到它。任何幫助,將不勝感激。

+0

你有沒有考慮過調試它,或者甚至用框和箭頭畫一個圖來檢查你的操作是否正確? –

+2

爲什麼要創建一個新節點來打印鏈表? – PaulMcKenzie

+1

調試此問題的最佳方法是繪製圖片並指出問題的來源。 – KRUKUSA

回答

0

我認爲你的問題可能是你對待你當前的指針,就像它是一個對象。 Current是一個指向內存中另一個對象的指針。因此,您的線路Node *current = new Node沒有意義,並且您在內存中丟失了該節點。您的問題可能是您delete current的最後一行。當前正指向列表中的最後一項,當您調用delete時,您將釋放內存當前點。因此,您正在刪除列表中的最後一個對象。在內存中創建對象時只需要使用delete,而當前不應該是新項目,它應該是指向現有內存的指針。

3

你爲什麼不讀你的問題的答案?我已經向您展示瞭如何以正向和反向順序打印列表。看這裏。 Implementing a push function in c++

+0

好點,標記爲重複的問題。 –

0

第一:

Node* current = new Node; 

這是完全不必要的。您不想從堆中創建新節點。所有你想要做的是指向當前節點到頭節點:

Node* current = q.first; 

然後假設當前是一個有效的節點,下一指針要麼點到下一個有效的節點或NULL來表示的結束列表中,while()循環開始出錯。它應該是這樣的:

while(current != NULL) 
{ 
    cout << current->val; 
    current = current->next; 
} 

當然,在最後刪除調用「刪除」。