今天做leetcode的时候使用链表遇到了这个问题,百思不得其解。遂疯狂百度标题,发现大伙都说了一个问题,那就是没有对指针判空。没办法,鄙人能力有限不知道为什么这个环境下不判空会报错,不过既然知道原因了就开始修改。
原代码如下,错误我圈起来了,因为没有对head和temp判断是否为空就开始访问,所以报错。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* deleteDuplicates(struct ListNode* head){
struct ListNode* ptr=head;
struct ListNode* temp=NULL;
struct ListNode* res=ptr;
while(ptr->next!=NULL)
{
temp=ptr->next;
while(temp->next!=NULL&&temp->val==ptr->val)
temp=temp->next;
if(temp->next==NULL)
break;
ptr->next=temp;
ptr=ptr->next;
}
if(temp->val==ptr->val)
ptr->next=NULL;
else
ptr->next=temp;
return res;
}
修改后如下:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* deleteDuplicates(struct ListNode* head){
if(head==NULL)
return NULL;
struct ListNode* ptr=head;
struct ListNode* temp=NULL;
struct ListNode* res=ptr;
while(ptr->next!=NULL)
{
temp=ptr->next;
while(temp->next!=NULL&&temp->val==ptr->val)
temp=temp->next;
if(temp->next==NULL)
break;
ptr->next=temp;
ptr=ptr->next;
}
if(temp!=NULL&&temp->val==ptr->val)
ptr->next=NULL;
else
ptr->next=temp;
return res;
}
对即将要访问的指针进行判空后再操作就没问题啦.
鄙人菜鸟一枚,请忽视我的垃圾代码...