2017-03-08 112 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

是的,我刪除了這一行 –