我正在尝试通过递归实现搜索双链接列表, 它只给出了第一个节点的输出,如果输入是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);
}
}
答案 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);
}
}