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

C语言双向链表分条件遍历打印 仅输出首节点问题排查

代码现存问题定位
  • 遍历方向逻辑错误导致打印顺序异常:你当前的逻辑是先把指针移动到链表尾部,依赖prev指针反向遍历全链表,先筛选打印prio>0的有预约患者,再重新走到尾部反向遍历打印prio<0的无预约患者。反向遍历输出的有预约患者顺序是从链尾向链头逆向排列的,完全不符合业务要求的“按预约优先级正序输出候诊列表”的规则。
  • 反向遍历易引发中断异常:如果之前构建双向链表时,部分节点的prev指针存在赋值遗漏、野指针的问题,反向走节点的过程中会直接跳出循环,表现为仅能打印遍历过程中碰到的第一个符合prio条件的节点,和你描述的运行现象完全吻合。
  • 空链表场景无保护:如果当前候诊列表没有任何患者(firstc为NULL),代码直接读取currentc->next字段会触发段错误,导致程序直接崩溃。
  • 冗余逻辑重复:两次写了完全相同的“从链表头走到尾部”的移动逻辑,没有复用通用遍历规则。
正确实现思路

业务要求的“先输出所有有预约患者、再输出所有无预约患者”,完全不需要反向遍历链表,顺着链表正向走两次就能满足需求,从根源上避免反向遍历的指针问题:

  1. 第一次遍历:从链表头firstc出发,顺着next指针一直走到链表尾,每经过一个节点就判断prio > 0的条件,符合就直接打印。这一轮就能按预约优先级的正序,把所有有预约的患者全部输出,匹配你设定的“首位有预约患者prio值为1、后续有预约患者prio递增”的规则。
  2. 第二次遍历:再次从链表头firstc出发,顺着next指针走到链表尾,每经过一个节点就判断prio < 0的条件,符合就直接打印。这一轮就能把所有无预约的患者全部输出。
  3. 注意:每一轮遍历前必须先判断firstc是否为NULL,如果是空链表直接跳过打印流程即可,不要直接读取节点字段。
修正后的可运行代码
void waiting(void)
{
    // 空链表保护
    if (firstc == NULL) {
        printf("当前候诊列表暂无患者信息\n");
        return;
    }

    printf("\n=== 有预约患者候诊列表 ===\n");
    // 第一次正向遍历:打印所有有预约的患者
    currentc = firstc;
    while (currentc != NULL) {
        if (currentc->prio > 0) {
            printf("%6d: %-20s %-6s %-15s %-20s %-8s %-8d\n",
                currentc->number,
                currentc->name,
                currentc->age,
                currentc->phone,
                currentc->numcin,
                currentc->state,
                currentc->prio);
        }
        currentc = currentc->next;
    }

    printf("\n=== 无预约患者候诊列表 ===\n");
    // 第二次正向遍历:打印所有无预约的患者
    currentc = firstc;
    while (currentc != NULL) {
        if (currentc->prio < 0) {
            printf("%6d: %-20s %-6s %-15s %-20s %-8s %-8d\n",
                currentc->number,
                currentc->name,
                currentc->age,
                currentc->phone,
                currentc->numcin,
                currentc->state,
                currentc->prio);
        }
        currentc = currentc->next;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 19:15:07