题目描述:
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。

示例 1:
输入:head = 1,2,6,3,4,5,6, val = 6
输出:1,2,3,4,5
示例 2:
输入:head = \[\], val = 1
输出:\[\]
示例 3:
输入:head = 7,7,7,7, val = 7
输出:\[\]
提示:
列表中的节点数目在范围 0, 104 内
1 <= Node.val <= 50
0 <= val <= 50
分析:
移除链表中和val值相同的元素
定义两个指针,当前指针cur,和当前指针之前的指针pre
当前指针cur指向头节点,当前指针的前驱pre指向NULL

遍历链表:
- 当链表中当前元素
ur->val!=val时,可以继续往下遍历,pre=cur,cur=cur->next

- 当链表中当前元素
ur->val=val时,就需要删除当前指针所指的节点,即通过pre来完成,让pre的指针域指向当前节点cur的下一个节点,pre->next=cur->next。如果当pre为空时,就类似于头删。

代码:
c
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeElements(struct ListNode* head, int val) {
struct ListNode*cur=head;
struct ListNode*pre=NULL;
while(cur)
{
if(cur->val!=val)
{
pre=cur;
cur=cur->next;
}
else
{
if(pre==NULL)
{
head=cur->next;
free(cur);
cur=head;
}
else
{
pre->next=cur->next;
cur=cur->next;
}
}
}
return head;
}