-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; –