递归C ++显示中间节点

时间:2017-05-12 05:37:28

标签: c++ recursion

如何修改此display_all函数以仅递归显示中间节点?

我的代码显示所有向后

int display_middle(node * head)
{

  if(!head)
    return 0;

  int count = 0;

  ++count;

  display_middle(head -> next);

  cout << head -> data << " "; 

}

2 个答案:

答案 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.

}