C中链接列表的递归搜索功能

时间:2017-06-20 22:39:25

标签: c search recursion linked-list singly-linked-list

我制作了汽车链表。 我正在尝试进行递归函数搜索。 这就是我做的。 出于某种原因,这不起作用。请问您能解释一下为什么以及如何解决它?

CarroPtr Search(CarroPtr head,int num)
{
   printf("Matricula %d\n", num);

   if (head == NULL)
    {
     return NULL;
    }

   if (head->matricula == num)
    {
     return head->nome;
    }
   else
    {
     head = head->next;
    }

  Search(head, num);

}

1 个答案:

答案 0 :(得分:2)

看来你的意思是以下

CarroPtr Search(CarroPtr head,int num)
{
    return head == NULL || head->matricula == num ? head : Search( head->next, num );
}

或者如果您认为在这种情况下它会更具可读性(尽管不是必需的话),您可以将三元运算符的条件括在括号中。

CarroPtr Search(CarroPtr head,int num)
{
    return ( head == NULL || head->matricula == num ) ? head : Search( head->next, num );
}

至于你的代码,那么函数会尝试返回不同类型的对象,如headhead->nome,或者返回任何内容,就像调用函数的语句一样

Search(head, num);

导致未定义的行为..