在c ++中递归显示链表

时间:2016-05-01 16:47:02

标签: c++

我试图以递归方式在链表中显示数据,但我不确定我的问题是否在递归函数中,或者我没有以0结束我的列表。

这是我的递归函数:

void ReverseDisplay(Node *head){ // call by Display function
cout << left; 
if (head == 0) return;

head = head->next ; // go to the next node
ReverseDisplay(head);
cout << setw(15) << head->ID << setw(15) << head->Num_hour << setw(15) << head->hourlyRate << endl;

}

这是我的阅读

void ReadList(Node *&head){

int id , numHour;
float hourRate;
ifstream inFile("employee.txt");
if(!inFile){cout << " Error: opening file fail... \n\n"; return;}

inFile >> id >> numHour >> hourRate;
while(inFile){

    // create node & fill it
    Node *Employee = new Node ;
    Employee->ID = id;
    Employee->Num_hour = numHour;
    Employee->hourlyRate = hourRate;
    Employee->next = 0;

    AddNode(head, Employee); // function that caver the 4 cases

inFile >> id >> numHour >> hourRate;

}// outer while

inFile.close();

}

和AddNade函数是:

void AddNode(Node *&head, Node *Employee){

if ( (head == 0) || (head->ID > Employee->ID) ){

        Employee->next = head ;     
        head = Employee;
    }
    else {

        Node *travel = head , *trail = 0;
        while ( (travel != 0) && (travel->ID < Employee->ID )){
            trail = travel;
            travel = travel->next;

        } // end while
    Employee->next = travel;
    trail->next = Employee;


    } // end else   

}

如果有人可以帮助我,我会感激...

1 个答案:

答案 0 :(得分:0)

ReverseDisplay()松散(不显示)第一个节点(如果我没错);我建议像

void ReverseDisplay(Node *head){ // call by Display function
   cout << left;
   if ( head ) {
       ReverseDisplay(head->next);
       cout << setw(15) << head->ID << setw(15) << head->Num_hour << setw(15) << head->hourlyRate << endl;
   }

----- 编辑 -----

当前版本有什么问题?

简单。

当你转到下一个节点时

head = head->next ; // go to the next node

您丢失了原始的head值,但您无法显示它。

可以从ReverseDiplay()的调用迭代中显示,但如果您在ReverseDisplay()的第一次迭代中显示,则head不会显示。< / p>

p.s:抱歉我的英语不好