赋值只在循环外有效
Assigning value only works outside the loop
我正在学习 CPP(第一语言),我正在尝试反转链表。
此代码无效
node* reverse(node** head){
node* previous=NULL;
node* current=*head;
node* nextptr=current->next;
while(current!=NULL){
current->next=previous;
previous=current;
current=nextptr;
nextptr=nextptr->next;
}
return previous;
}
这个有效
node* reverse(node** head){
node* previous=NULL;
node* current=*head;
node* nextptr;
while(current!=NULL){
nextptr=current->next;
current->next=previous;
previous=current;
current=nextptr;
}
return previous;
}
为什么第二个代码片段有效而第一个代码片段无效?
Why does the second code snippet works while the first one doesn't ?
第一个片段在取消引用潜在的空指针之前没有进行检查。因为您使用空指针来指示列表的末尾,所以它总是取消引用空指针,因此具有未定义的行为。
第二个代码段从不取消引用它尚未验证为非空的指针。
我正在学习 CPP(第一语言),我正在尝试反转链表。 此代码无效
node* reverse(node** head){
node* previous=NULL;
node* current=*head;
node* nextptr=current->next;
while(current!=NULL){
current->next=previous;
previous=current;
current=nextptr;
nextptr=nextptr->next;
}
return previous;
}
这个有效
node* reverse(node** head){
node* previous=NULL;
node* current=*head;
node* nextptr;
while(current!=NULL){
nextptr=current->next;
current->next=previous;
previous=current;
current=nextptr;
}
return previous;
}
为什么第二个代码片段有效而第一个代码片段无效?
Why does the second code snippet works while the first one doesn't ?
第一个片段在取消引用潜在的空指针之前没有进行检查。因为您使用空指针来指示列表的末尾,所以它总是取消引用空指针,因此具有未定义的行为。
第二个代码段从不取消引用它尚未验证为非空的指针。