在遍历链表时,我对程序的行为感到困惑。
我正在编写一个函数,用于检查整数的链表是否按升序排列,如果是,则返回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 ;
}
当列表不按递增顺序但在崩溃时崩溃时,它会起作用。你有什么想法会出错吗?
答案 0 :(得分:3)
您还有:
if(top=NULL) return 0;
将NULL
分配给top
,条件被视为FALSE。
答案 1 :(得分:3)
这段代码有几件事很奇怪。它崩溃的原因是您访问curr->next->num
而未检查curr->next
是NULL
。
还有一些其他事情没有意义。指针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->next
是NULL
。你的代码只有#34;工作"对于无序的情况,因为函数在到达列表末尾之前会仁慈地终止。
要修复您的计划,请在取消引用之前检查curr->next
是否为NULL
。