我一直在尝试创建一个有序的双链表,然后使用递归将其打印出来。我不知道我是否错误地将节点添加到链接列表中,或者我的问题是否在我的打印功能中。
主要
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 :(得分:0)
在评论中(但不在您的问题中),您说您在printFowards(head)
中呼叫printBackwards(head)
和main()
。但在main()
中,变量head
是一个设置为NULL
的局部变量。因此函数会中止,当您注释掉退出条件[ shudder ]时,您将取消引用空指针并获得未定义的行为。
列表可能正确构建;它并不重要,因为您对打印功能的调用与列表无关。