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;
}
不知道为什么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;
}