如何修改此display_all函数以仅递归显示中间节点?
我的代码显示所有向后
int display_middle(node * head)
{
if(!head)
return 0;
int count = 0;
++count;
display_middle(head -> next);
cout << head -> data << " ";
}
答案 0 :(得分:1)
你可以尝试使用两个指针,一个一步一步,一个一步一步进行两步,然后当一次进行两步的那个点击NULL时,你就知道你了使用一次一步进行的节点命中中间节点。下面是代码的草图,您需要添加边界检查和验证。
int display_middle_rec(node * head, node * next)
{
if((!next) || (!(next->next)))
return head->data;
return display_middle_rec(head->next, next->next->next);
}
int display_middle(node * head)
{
return display_middle_rec(head, head);
}
主要
std::cout<<display_middle(head);
答案 1 :(得分:0)
这更像是一个让你入门的伪代码,请计算一些极端情况,例如零长度列表,奇数/偶数列表长度的中点等。
int count = 0;
int finalCount = 0;
int middle = 0;
int returnIndex = 0;
int display_middle(node * head) {
if(!head) {
finalCount = count;
returnIndex = finalCount;
mid = finalCount/2; // Handle mid point for odd/Even list length here. This is
// For illustration purposes.
return 0;
}
//int count = 0;
++count;
display_middle(head -> next);
if(returnIndex == mid) {cout << head -> data << " ";}
returnIndex = returnIndex - 1; //Work out if this statement needs to go before the previous one or is OK here.
}