shuffle merge链表递归解决方案

时间:2015-02-08 08:57:32

标签: c recursion

我正在尝试理解链接列表,但我陷入了以下递归解决方案。设a = {1,2,3},b = {4,5,6}。用笔和纸,我已达到重复指针。当recur等于NULL时,我开始继续,但是当我来到b -> next = recur;的行时,我感到困惑。因为recur的先前值是NULL,但是如果它是NULL,则意味着函数在那里结束但是它不是递归函数。如果我需要去那条recur = ShuffleMerge(a->next, b->next);的那一行,情况会变得更糟。因为a -> next = NULLb -> next = NULL,因为当我们第一次计算复现时,a是3而b是6,所以我不明白这段代码是如何工作的,但即使我用gdb检查过,它也表明结果是前3然后是2,最后是1.但我真的不明白那个解决方案。我需要一些帮助!提前谢谢。

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
        b->next = recur; // then the rest
        return(result);
    }
}

0 个答案:

没有答案