/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeElements(struct ListNode* head, int val) {
if (head==NULL||head->next==NULL&&head->val==val){
return NULL;
}
if (head->next==NULL){
return head;
}
/* struct ListNode *low=head;
struct ListNode *fast=head->next;
while (fast){
if (fast->val==val&&fast->next&&fast->next->val==val){
fast=fast->next;
continue;
}
if (fast->val==val){
low->next=fast->next;
if (fast->next==NULL){
break;
}
fast=low->next->next;
}
else{
fast=fast->next;
}
low=low->next;
}
if (head->val==val){
head=head->next;
}
return head;
*/
struct ListNode *prev=(struct ListNode *)malloc(sizeof(struct ListNode));
prev->next=head;
struct ListNode *fast=prev;
while (fast&&fast->next){
if (fast->next->val==val){
fast->next=fast->next->next;
}
else{
fast=fast->next;
}
}
return prev->next;
}
注释里是自己写的代码,正式的代码是写完以后参考别人的代码写的。
果然还是要多学习别人的代码。
自己写的还要讨论head->val是不是等于val的情况。
别人直接在链表前加了一个空节点,这个想法不错,这样就不用考虑没有指针指向head的情况了。