leetcode 203. Remove Linked List Elements(accepted) C language

来源:互联网 发布:妙笔生花软件使用教程 编辑:程序博客网 时间:2024/06/05 06:29
/** * 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;}