赋值只在循环外有效

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 ?

第一个片段在取消引用潜在的空指针之前没有进行检查。因为您使用空指针来指示列表的末尾,所以它总是取消引用空指针,因此具有未定义的行为。

第二个代码段从不取消引用它尚未验证为非空的指针。