2012-09-06 50 views
0
struct node* ShuffleMerge(struct node* a, struct node* b) { 
struct node* result; 
struct node* recur; 
if (a==NULL) return(b); // see if either list is empty 
    else if (b==NULL) return(a); 
    else { 
    // it turns out to be convenient to do the recursive call first -- 
    // otherwise a->next and b->next need temporary storage. 
    recur = ShuffleMerge(a->next, b->next); 
    result = a; // one node from a 
    a->next = b; // one from b 
    return(result); 
    } 
} 

代碼不工作,B後無法訪問的元素......ShuffleMerge使用遞歸

+0

我建議你嘗試使用筆和紙來繪製最簡單的a和b的非平凡示例,然後通過代碼工作,隨時寫出每個變量的新值。那裏至少有一個bug。 –

回答

0

這裏有一個簡單的「筆和紙」調試會話,使用我能想到的最簡單的非平凡輸入:

S(a=1->2, b=3->4)    1->2 2->N 3->4 4->N 
recur := S(2, 4) 
    recur := S(a=N, b=N) 
     return N 
    recur := N 
    result:= 2 
    a  := 2->4     1->2 2->4 3->4 4->N 
recur := N 
result:= 1->2->4 
a  := 1->3->4     1->3 2->4 3->4 4->N 
return 1->3->4 

那是代碼應該爲這種情況做什麼?如果不是,爲什麼不呢?

我希望這種技術在未來有用。