You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言:仅以Shelf为入参打印嵌套书架-书籍链表的结构体内容

嵌套双层链表打印功能实现指南

现有打印代码的核心问题

  • 书架遍历死循环:外层while (shelf != NULL)的循环体内没有执行shelf = shelf->next的指针迭代,只要传入非空的书架头节点,程序会永久卡在同一个书架节点上反复打印,无法退出循环
  • 空指针访问风险:未对当前书架的books成员做空值判断,由于create_shelf初始化时会把books置为NULL,一旦遇到未挂载书籍的空书架,直接访问shelf->books->text会触发内存非法访问,程序直接崩溃
  • 缺失书籍链表遍历逻辑:完全没有嵌套遍历当前书架下挂载的书籍链表,既没有拿到书籍链表的头节点做循环判断,也没有沿book->next指针逐本跳转,所有非第一本的书籍内容都会被遗漏
  • 输出格式不符合预期:打印语句没有添加换行、节点间分隔标识,所有输出内容会粘连在同一行,无法区分不同书籍的属性值

满足约束的正确实现

函数入参严格限定为仅接收Shelf类型,通过双层嵌套循环完成全节点遍历,代码如下:

void print_everything (Shelf shelf) {
    // 外层循环:遍历整条书架链表
    while (shelf != NULL) {
        // 取出当前书架的书籍链表头指针,作为内层遍历的起点
        struct book *cur_book = shelf->books;
        // 内层循环:遍历当前书架下的所有书籍
        while (cur_book != NULL) {
            // 按要求格式打印单本书的属性
            printf("%d, %d\n", cur_book->text, cur_book->image);
            // 指针跳转至下一本书
            cur_book = cur_book->next;
        }
        // 指针跳转至下一个书架
        shelf = shelf->next;
    }
}

实现逻辑说明

  • 采用双层嵌套遍历结构,外层逐节点遍历书架链表,内层逐节点遍历对应书架下的书籍链表,无遗漏覆盖所有节点
  • 内层循环以cur_book != NULL为终止条件,自动跳过空书架场景,不会触发空指针非法访问
  • 所有指针跳转操作均在函数局部变量上完成,不会修改外部传入的原始链表结构,符合链表遍历的无侵入要求

内容的提问来源于stack exchange,提问作者pikamoch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.25 05:36:07