首页 > 解决方案 > 递归查找列表中的最小偶数

问题描述

我写了这个函数:

struct nodo * MinimoPariListaRic(struct nodo * top) {
  struct nodo * minimo_p = NULL; //this should be the minimum even number

  //list have one or no one element
  if(top) {
    if(!top->next) 
        if(top->valore % 2 == 0) return top; // valore(italian) = value
        else return NULL;
  }
  else return NULL;


  if(top->next)
    minimo_p = MinimoPariListaRic(top->next);

  if (top->valore % 2 == 0)
  {
     if(minimo_p->valore < top->valore) return minimo_p;
     else return top;
  }
  else return minimo_p;
}

如果列表的元素都是偶数,函数会返回最小值,就可以了。但如果出现奇数,则该功能无法正常工作。如果所有数字都是奇数,则函数应返回 NULL。

标签: crecursionlinked-listsingly-linked-listfunction-definition

解决方案


因为如果列表在最后一个位置包含一个奇数整数并且在任何地方至少包含一个偶数整数,则函数从递归返回后 minimo_p 可以为 NULL 。

这行是错误的:

if(minimo_p->valore < top->valore) return minimo_p;

您可以在此处添加空条件:

if(minimo_p && minimo_p->valore < top->valore) return minimo_p;

推荐阅读