双链接列表通过递归搜索C ++

时间:2017-03-08 09:29:41

标签: c++ recursion visual-c++

我正在尝试通过递归实现搜索双链接列表, 它只给出了第一个节点的输出,如果输入是1,2,3并且我试图搜索1然后它给了我找到,但是如果我试图搜索2然后它说没有找到。 我想

else
{
    return search(xtemp->next, num);
}

不起作用,它不会前进。

int search(node *xtemp, int num)
{
    xtemp = head;
    if (xtemp->next == NULL)
        return 0;
    if (xtemp == NULL)
    {
        cout << "Empty" << endl;
        return 0;
    }
    if (xtemp->info == num)
    {
        cout << "Target found" << endl;
        return 0;
    }
    if (xtemp->info != num)
    {
        cout << "NOt found," << endl;
        return 0;
    }

    else
    {
        return search(xtemp->next, num);
    }
}

1 个答案:

答案 0 :(得分:2)

我认为你有一个名为head的gloval变量... 看看你在函数的第一行做了什么

 xtemp = head;

所以,无论你在递归调用中得到什么,你用链表头替换xtemp值

您应该从main()调用search(head),并且不要在函数内使用xtemp=head

另外,请看以下内容:

 if (xtemp->info == num)
    {
        cout << "Target found" << endl;
        return 0;
    }
    if (xtemp->info != num)
    {
        cout << "NOt found," << endl;
        return 0;
    }

您的递归调用将永远不会被调用,因为您使用xtemp-&gt; info覆盖所有可能的选项,如果它等于num,它将返回0,如果它不等于num,它也将返回0。你想要进行递归通话吗?

试试这个:

int search(node *xtemp, int num)
{
    if (xtemp == NULL)
    {
        cout << "Not Found" << endl;
        return 0;
    }
    if (xtemp->info == num)
    {
        cout << "Target found" << endl;
        return 0;
    }
    else
    {
        return search(xtemp->next, num);
    }
}