-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;
}
我認爲我已經加載數據到節點,但我不確定它的訂購是否因爲我無法打印。
至少打印後退看起來好像它的方向不對。如果沒有程序的缺失部分,我們無法編譯或測試你的代碼,但是:你得到了什麼輸出?嘗試在調試器中單步執行程序並檢查頭,*(head-> next)等。測試您的流是否成功讀取任何內容。這至少會告訴你,如果你的數據被存儲。 – Davislor
而不是試圖從文件讀取數據,硬編碼一些值。然後嘗試在嘗試遞歸之前打印*一個節點*的內容。從小而簡單的開始,一次添加一點複雜性,並且**不要添加到不起作用的代碼**。 – Beta
數據正在被存儲,我通過添加功能行並進行了檢查。當我在main中調用printFowards(head)或printBackwards(head)時,它會返回if語句中的返回值,然後運行失敗。我評論了退出條件,看看會發生什麼(我預計它會進入一個無限循環),但運行失敗,只要它到達了cout << head->元素<< endl; –