尝试以递归方式在c ++中打印链表

时间:2015-09-27 23:21:11

标签: c++ recursion linked-list

我一直在尝试创建一个有序的双链表,然后使用递归将其打印出来。我不知道我是否错误地将节点添加到链接列表中,或者我的问题是否在我的打印功能中。

主要

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

我认为我已将数据加载到节点中,但我不确定它是否已订购,因为我无法打印它。

1 个答案:

答案 0 :(得分:0)

在评论中(但不在您的问题中),您说您在printFowards(head)中呼叫printBackwards(head)main()。但在main()中,变量head是一个设置为NULL的局部变量。因此函数会中止,当您注释掉退出条件[ shudder ]时,您将取消引用空指针并获得未定义的行为。

列表可能正确构建;它并不重要,因为您对打印功能的调用与列表无关。