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

ReverseList函数失效问题:单向链表反转未生效的原因排查

为啥链表没反转?问题出在这

最关键的坑:你调用了两次反转函数

看你的调用代码,在判断分支里连续调用了两次ReverseList(&L[i_num]):

if(ReverseList(&L[i_num]) == INFEASIBLE) 
    printf("The list doesn't exist!\n");
else if(ReverseList(&L[i_num]) == ERROR) 
    printf("The list is empty!\n");
else
    printf("Success!\n");

第一次调用已经把链表反转好了,但第二次调用直接把反转后的链表又转回去了——等于做了两次反转,结果和没转一样,这就是你觉得链表没变化的核心原因。

还有个小问题:反转函数没处理空链表

你的ReverseList函数里,只判断了指针L是否为空,没判断链表本身(*L)是否为空。这会导致空链表调用函数时,不会返回ERROR,而是直接返回OK,所以你代码里的else if分支永远不会触发,不符合你原本的错误提示逻辑。

怎么改?
  1. 先存返回值,再判断:把函数调用的结果先存起来,避免重复调用:
case 15://ReverseList
    status ret = ReverseList(&L[i_num]);
    if(ret == INFEASIBLE) 
        printf("The list doesn't exist!\n");
    else if(ret == ERROR) 
        printf("The list is empty!\n");
    else
        printf("Success!\n");

    getchar(); 
    getchar();
    break;
  1. 给反转函数补上空链表判断:
status ReverseList(LinkList *L)
//reverse the list
{
    if(L == NULL)
    {
        return INFEASIBLE;
    }
    if(*L == NULL) // 新增:判断链表是否为空
    {
        return ERROR;
    }
    LinkList prev=NULL;
    LinkList cur=*L;
    LinkList next=NULL;
    while(cur)
    {
        next=cur->next;
        cur->next=prev;
        prev=cur;
        cur=next;
    }
    *L=prev;
    return OK;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 13:22:44