题目链接:力扣
代码实现,及通过while循环来判断节点的值是否与要删除的值相同,如果相同则删除该节点。
注意:else if里面的判断条件,一定要把prev != NULL写在前面,不然prev->next行会报错
runtime error: member access within null pointer of type 'struct Node' [solution.c]
及prev->next可能为空指针的错误。
ListNode removeElements(ListNode L, int val) {
ListNode p = NULL, q;
ListNode prev;//prev用来记录p的前驱节点
prev = LinkListInit();
p = L;
if (p == NULL) {
return NULL;
}
while (p) {
if (p->val == val && p->next != NULL) {
q = p->next;
p->val = p->next->val;
p->next = q->next;
free(q);
}
else if (prev != NULL && p->val == val && p->next == NULL) {//删除尾节点
prev->next = p->next;
free(p);
p = NULL;
}
else {
prev = p;
p = p->next;
}
}
return L;
}