我创建了一个链表,然后使用以下搜索功能获取数据字段的位置,但它返回的值作为链表的最后一个元素。我无法猜到为什么
int search(struct node *curr,int d,int i)
{
if (!(curr-1))
return(0);
if (curr->data == d)
return i;
else
{
i++;
search(curr->link,d,i);
}
}
我使用以下语句从main控制它:
m =搜索(首先,数据,i)//这里首先是第一个元素到第一个元素的指针,数据是要搜索的元素
答案 0 :(得分:3)
if (!(curr-1))
为什么-1
?
else
{
i++;
search(curr->link,d,i);
}
您忘记了return
声明。否则,返回值未定义。然后,您的递归search
函数可能如下所示:
int search(struct node *curr, int d, int i)
{
if (curr == NULL)
return 0; /* If 1 <= i <= n */
else if (curr->data == d)
return i;
else
return search(curr->link, d, i + 1);
}
答案 1 :(得分:1)
为什么递归?你学会了坏习惯。
int search(struct node* curr, int d, int i)
{
if (NULL == curr)
{
return 0;
}
i = 1;
while(curr->data != d)
{
if (NULL != curr->link)
{
curr = curr->link;
++i;
}
else
{
return 0;
}
}
return i;
}