判断!=NULL的时候会报错说这个地址是nullptr
问题描述:
做查重删除时,要求b->next!=NULL时跳出循环,之前在写别的程序时这么写没问题,而且此时b->next也是等于NULL了,但是系统确保错了
答
用b->next->data的前提必须是b->next !=NULL,所以你的内层while循环和if条件中,都必须先判断 b->next != NULL.
while循环部分代码修改如下
while(a->next != NULL)
{
b=a;
while(b->next !=NULL && b->next->data != a->data)
{
b=b->next;
}
if(b->next != NULL && b->next->data !=a->data )
{
b->next = b->next->next;
}
a = a->next;
}
但是
有一点没搞明白啊,你的内层while循环条件跟if的条件完全一致,if语句基本不会执行的,因为内层while循环结束的条件,要么是b->next ==NULL了,要么是b->next->data == a->data,所以,内层while循环结束后,这两个至少有一个是成立的,那么if就永远不会成立了,你这个if永远不会执行的,你仔细检查一下逻辑吧。
答
判断条件要换一下顺序,判断null要放在前面。
while(b->next !=NULL && b->next->data != a->data){
....
}