删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3->4->5
解题思路:
分为两种情况考虑:
1、首元素为待删元素;
2、首元素非待删元素
实现删除则是把待删元素的next指向变为其前驱的next指向
实现代码:
struct ListNode* removeElements(struct ListNode* head, int val){
struct ListNode* cur = head;
struct ListNode* del = head;
struct ListNode* pre = head;
while(head && head->val == val) {
head = head->next;
free(cur);
cur = head;
}
while (cur) {
if(cur->val == val) {
del = cur;
cur = cur->next;
pre->next = cur;
free(del);
}
else {
pre = cur;
cur = cur->next;
}
}
return head;
}
运行结果: