2017-03-08 88 views
-1

我试图寻找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

解决这些问题的正确工具是你的调试器。在*堆栈溢出问题之前,您应该逐行执行您的代码。如需更多帮助,请阅读[如何调试小程序(由Eric Lippert撰写)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,您应该\编辑您的问题,以包含一个[最小,完整和可验证](http://stackoverflow.com/help/mcve)示例,该示例再现了您的问题,以及您在调试器。 –

+0

它没有给我一个错误 –

+1

@ p156064ZeeshanHaiderSaheen,它不会给你一个错误。你需要*搜索错误。调试器使它更容易一些。 – Incomputable

回答

2

我认为你有gloval变量命名的头...... 看你在做你的函数的第一行

xtemp = head; 

那么什么,无所谓你在递归调用得到,你替换xtemp值与链表的头

你应该叫从主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->信息所有可能的选择,如果它等于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); 
    } 
} 
+0

我做到了,仍然没有工作 –

+0

你是否从函数中删除了行xtemp = head? –

+0

是的,我删除了这一行 –