C 中链表的递归搜索函数
Recursive Search Function for a Linked List in C
我制作了一个汽车链表。
我正在尝试进行递归函数搜索。
这是我所做的。
由于某种原因,这不起作用。请您解释一下为什么以及如何解决它?
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);
}
看来你的意思如下
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 );
}
至于您的代码,那么该函数要么尝试 return 不同类型的对象,例如 head
和 head->nome
,要么 return 什么都没有,就像带有函数调用的语句
Search(head, num);
这会导致未定义的行为..
我制作了一个汽车链表。 我正在尝试进行递归函数搜索。 这是我所做的。 由于某种原因,这不起作用。请您解释一下为什么以及如何解决它?
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);
}
看来你的意思如下
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 );
}
至于您的代码,那么该函数要么尝试 return 不同类型的对象,例如 head
和 head->nome
,要么 return 什么都没有,就像带有函数调用的语句
Search(head, num);
这会导致未定义的行为..