【问题标题】:Trouble with a linked list recursive reverse function链表递归反向函数的问题
【发布时间】:2015-04-30 22:37:55
【问题描述】:

我正在尝试以递归方式打印链接列表。我为递归打印创建了自己的辅助函数,并在我的主打印反向函数中调用它。

发生的情况是,我指向列表头部的指针将成功地转到列表的最后一个元素,但它会崩溃。我不太确定这里到底发生了什么。我已经用我的!=NULL 检查了是否越界。我有点迷失为什么在最后一个整数处建立指针后它没有向后打印。这是我的代码。

void lst_recursion(NODE *p){
     while (p != NULL){
         lst_recursion(p->next);
         printf(FORMAT, p->val);
     }
}

void lst_print_rev(LIST *l) {
    NODE *p = l->front;
    printf("[");

    while (p!= NULL){
        lst_recursion(p);
    }
    printf("]\n");
}

【问题讨论】:

    标签: c recursion compiler-errors


    【解决方案1】:

    首先,您在任何中都不需要while 循环。主入口点应如下所示:

    void lst_print_rev(const LIST *l) 
    {
        printf("[");
        lst_recursion(l->front);
        printf("]\n");
    }
    

    假设您的列表以空值结尾,实际函数应该如下所示:

    void lst_recursion(const NODE *p)
    {
        if (p == NULL)
            return;
    
        lst_recursion(p->next);
        printf(FORMAT, p->val);
    }
    

    这将递归到尾部,对该值(NULL)不执行任何操作,然后展开激活堆栈,在退出时报告每个节点。请记住,递归算法需要具体的退出策略,它们通常是一个简单的if 条件,什么都不做,只是退出调用

    祝你好运。

    【讨论】:

    • 非常感谢!我现在明白了我在使用 while 语句时哪里出错了。我把一些事情搞混了,但这有帮助。
    猜你喜欢
    • 2019-01-09
    • 2011-12-19
    • 2013-03-04
    • 1970-01-01
    • 2017-08-18
    • 2013-06-02
    相关资源
    最近更新 更多