我试图以递归方式在链表中显示数据,但我不确定我的问题是否在递归函数中,或者我没有以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
}
如果有人可以帮助我,我会感激...
答案 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:抱歉我的英语不好