0

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

我正在编写一个函数,该函数应该检查整数的链表是否按升序排列,如果是则返回 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 ;
}

它在列表不是按升序排列但在升序时崩溃时起作用。你有什么想法吗?

4

3 回答 3

3

你还有:

if(top=NULL) return 0;

那是分配NULLtop并且条件被视为FALSE。

于 2012-07-07T18:03:22.423 回答
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;
}
于 2012-07-07T18:07:13.093 回答
1

它崩溃了,因为在某些时候curr->nextNULL. 您的代码仅适用于无序情况,因为该函数在到达列表末尾之前仁慈地终止了。

要修复您的程序,请在取消引用之前检查它curr->next是否存在。NULL

于 2012-07-07T18:00:16.980 回答