题目来源LeetCode:83.删除排序链表中的重复元素
题很简单;可是遇到一个小问题;记录一下:
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
/*if(!head)
return head;*/
ListNode *p = head;
while(p->next){
if(p->val==p->next->val){
ListNode *k=p->next;
p->next=p->next->next;
delete k;
}else{
p=p->next;
}
}
return head;
}
};
当我提交这段代码时,出现编译错误:member access within null pointer of type 'ListNode' (solution.cpp)
这是由于,没有考虑到,当传入的head 直接指向空时;p->next就是错误表述,访问到一个空指针;
所以需要加上注释的那两行来判断一下,如果head指向空,是个空链表,直接返回。
或者这样解决:添加一个判断;
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
ListNode *p = head;
while(p&&p->next){ //加一个判断,传进来的不能是空链表
if(p->val==p->next->val){
ListNode *k=p->next;
p->next=p->next->next;
delete k;
}else{
p=p->next;
}
}
return head;
}
};