搜索链表时输出错误

时间:2013-06-14 07:56:53

标签: c linked-list

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

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)//这里首先是第一个元素到第一个元素的指针,数据是要搜索的元素

2 个答案:

答案 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;
}