LeetCode 83. 从排序列表中删除重复项

LeetCode 83. Remove Duplicates from Sorted List

不知道为什么subit的结果是“'struct ListNode'类型的空指针内的成员访问”。我测试了样本,资本是正确的,我不知道我对空指标的认知有什么问题,有人可以帮助我吗?

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* deleteDuplicates(struct ListNode* head){
   
    struct ListNode* node = head;
    while(node->next != NULL && node != NULL){
        if(node->val == node->next->val){
            struct ListNode* duplicate = node->next;
            node->next = node->next->next;
            free(duplicate);
        }
        else node = node->next;
    }
    return head;
}

如果列表为空,head 将为 NULL。在 while 循环表达式 node 中使用 node->next 取消引用,它在右侧之前计算,它检查 node 是否为 NULL。在评估 while 循环之前,您应该检查 node 是否为 NULL,并且 NULL 检查 node 应该始终在 NULL 检查之前执行node->next.

这是我的建议:

struct ListNode* deleteDuplicates(struct ListNode* head){
   
    struct ListNode* node = head;
    while(node != NULL){
        if(node->next == NULL)
        {
           node = node->next;
        }
        else if(node->val == node->next->val){
            struct ListNode* duplicate = node->next;
            node->next = node->next->next;
            free(duplicate);
        }
        else node = node->next;
    }
    return head;
}