/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeElements(struct ListNode* head, int val) {
struct ListNode *flag, *t;
while((head != NULL) && (head->val == val))//头结点的值若命中则会改变链表起点,因而先单独处理
{
t = head;
head = t->next;
free(t) ;
}
if(head == NULL) return 0;
//此时链表不为空且head->val != val;
flag = head;//设置浮动指针
//遍历链表,如果命中就进行节点删除操作,这里应注意,如果free(t),则flag保持不动,否则会跳过一个结点(这里判断用的是flag->next->val)
while(flag->next != NULL)
{
if(flag->next->val == val)
{
t = flag->next;
flag->next = t->next;
free(t);
continue;
}
flag = flag->next;
}
return head;
}