2015-09-27 47 views
-1

我一直在嘗試創建一個有序的雙鏈表,然後用遞歸將它向前和向後打印出來。我不知道是否將節點錯誤地添加到鏈接列表中,或者如果我的問題出現在我的打印功能中。試圖用C++遞歸地打印鏈表

主要

int main() { 
    ifstream addData; 
    addData.open("proj1adds.data"); 
    LinkedList<int> List; 
    Node<int> *head = NULL: 
    int add; 
    int i = 0; 
    while (!addData.eof()){ 
     addData >> add; 
     List.add(i, add); 
     i++; 
    } 
} 

這是我的附加功能

template < typename T > 
void LinkedList <T>::add(int index, T element) 
{ 
    if (index == 0){ 
    addFirst(element); 
    } 
    else if (index >= size){ 
    addLast(element); 
    } 
    else 
    { 
    Node <T> * current = head; 
    for (int i = 1; i < index; i++) 
     current = current->next; 
    Node <T> * temp = current->next; 
    current->next = new Node <T> (element); 
    (current->next)->prev = current; 
    (current->next)->next = temp; 
    size++; 
    } 
}  

這些都是我的打印功能

template<typename T> 
void LinkedList<T>::printForward(Node<T> *head){ 
    if(head==NULL){ 
     return; 
    } 
    cout << head->element << endl; 
    printForward(head->next); 
} 

template<typename T> 
void LinkedList<T>::printBackward(Node<T> *head){ 
    if(head==NULL){ 
     return; 
    } 
    printBackward(head->next); 
    cout << head->element << endl; 
} 

我認爲我已經加載數據到節點,但我不確定它的訂購是否因爲我無法打印。

+0

至少打印後退看起來好像它的方向不對。如果沒有程序的缺失部分,我們無法編譯或測試你的代碼,但是:你得到了什麼輸出?嘗試在調試器中單步執行程序並檢查頭,*(head-> next)等。測試您的流是否成功讀取任何內容。這至少會告訴你,如果你的數據被存儲。 – Davislor

+0

而不是試圖從文件讀取數據,硬編碼一些值。然後嘗試在嘗試遞歸之前打印*一個節點*的內容。從小而簡單的開始,一次添加一點複雜性,並且**不要添加到不起作用的代碼**。 – Beta

+0

數據正在被存儲,我通過添加功能行並進行了檢查。當我在main中調用printFowards(head)或printBackwards(head)時,它會返回if語句中的返回值,然後運行失敗。我評論了退出條件,看看會發生什麼(我預計它會進入一個無限循環),但運行失敗,只要它到達了cout << head->元素<< endl; –

回答

0

在評論(但不是在你的問題)你說你打電話printFowards(head)printBackwards(head)main()。但在main()中,變量head是設置爲NULL的局部變量。所以函數中止,並且當你註銷退出條件[不寒而慄]時,你解除引用空指針並獲得未定義的行爲。

也許列表被正確構建;這並不重要,因爲您對打印功能的呼叫沒有連接到列表。