我正在尝试实施一个链表,我遇到了一个非常顽固和令人沮丧的问题。这是相关的代码。
Node* current = list->head;
Node* previous = malloc(sizeof(Node*));
previous = NULL;
while(current != NULL){
if(current == NULL){
printf("current is null");
}
last = current;
current = current->next;
if(last == NULL){
printf("last is null");
}
}
现在它的问题是打印
“last is null”
经常但不打印
“当前为空”
一次。如果current不为null并且我设置last = current那么为什么最后一次保持为null?
感谢您提供任何见解
答案 0 :(得分:1)
首先,您不希望使用sizeof(Node*)
来分配指针的大小(32位/ 64位/其他东西,具体取决于平台)。这是毫无意义的,因为您可以并且已经使用Node* previous
定义指针。
其次,while()
中的表达式检查当前是否不等于NULL
。如果current等于NULL
,它只会退出循环,因此if(current == NULL)
比较将不会执行。
如果您将if(current == NULL)
放在current = current->next;
之后,则可以使该比较有效。但是,如果打印了last is null
,则其他内容也会因代码完全存在缺陷,因为current
必须在last
之前为空。令人惊讶的是它没有给出分段错误或其他什么。