1

我创建了一个链表,然后使用以下搜索函数来获取数据字段的位置,但它返回的值作为链表的最后一个元素。我无法猜测为什么

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=search(first,data,i) //这里 first 是指向第一个元素的指针,data 是要搜索的元素

4

2 回答 2

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); 
}
于 2013-06-14T07:59:42.003 回答
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;
}
于 2013-06-14T08:08:17.003 回答