当值按升序排列时,为什么链接列表功能会崩溃?

时间:2012-07-07 17:54:53

标签: c list linked-list

在遍历链表时,我对程序的行为感到困惑。

我正在编写一个函数,用于检查整数的链表是否按升序排列,如果是,则返回1,否则返回0。以下是我到目前为止的情况:

int isasc(NodePtr top){

    NodePtr curr=top;

    if(top=NULL) return 0;

    while(curr!=NULL){

        if(curr->num > curr->next->num){ 
            return 0;
        }
        curr=curr->next;
    }
    return 1 ;
}

当列表不按递增顺序但在崩溃时崩溃时,它会起作用。你有什么想法会出错吗?

3 个答案:

答案 0 :(得分:3)

您还有:

if(top=NULL) return 0;

NULL分配给top,条件被视为FALSE。

答案 1 :(得分:3)

这段代码有几件事很奇怪。它崩溃的原因是您访问curr->next->num而未检查curr->nextNULL

还有一些其他事情没有意义。指针top未使用,也未与NULL进行比较,但NULL进行比较,该语句将始终评估为NULL,这是假的。

取而代之的是:

int isasc(NodePtr curr)
{
    if(curr == NULL) return 0;

    while(curr->next != NULL)
    {
        if(curr->num > curr->next->num) 
            return 0;

        curr = curr->next;
    }

    return 1;
}

答案 2 :(得分:1)

它崩溃了,因为在某些时候curr->nextNULL。你的代码只有#34;工作"对于无序的情况,因为函数在到达列表末尾之前会仁慈地终止。

要修复您的计划,请在取消引用之前检查curr->next是否为NULL