先上代码
class Solution{
public:
ListNode* removeElements(ListNode* head, int val) {
while(head != NULL && head->val == val)
{
ListNode* deleteN = head;
head = deleteN->next;
delete deleteN;
}
if(head == NULL)
return NULL;
ListNode* cur = head;
while(cur->next!=NULL){
if(cur->next->val == val){
ListNode* deleteN = cur->next;
cur->next = deleteN->next;
delete deleteN;
}
else
cur = cur->next;
}
return head;
}
};
一直不通过,调试了半小时,开始我写的第一个while为:
while(head->val == val && head!=NULL)
后来才想到while里执行次序的问题,先执行前面的,如果head为空的话,访问head的元素显然是非法的。