移除链表元素

LeetCode:删除链表中等于给定值 val 的所有节点

示例:

输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5

解题思路:
定义一个指针,让这个指针遍历链表,然后判断每个节点的val 和我们要删除的val是否相等,如果相等,则删除这个节点(链表不能断),如果不相等,则往下走,直到遍历完整个链表。(要考虑到一些特殊情况,不要遗漏)

struct ListNode {
    int val;
    struct ListNode *next;
    };
    struct ListNode* removeElements(struct ListNode* head, int val) {
    
    struct ListNode* pcur=NULL;
    struct ListNode*pcurpre=NULL;
    pcur=head;
    pcurpre=pcur;
    if(head==NULL)
    {
        return NULL;
    }
    else
    {
        while(pcur)
        {
            if(pcur->val==val)
            {
                if(head==pcur)
                {
                    head=head->next;
                    free(pcur);
                    pcur=head;
                }
                else
                {
                     pcurpre->next=pcur->next;
                     free(pcur);
                      pcur=pcurpre->next;
                }
               
            }
            else
            {
                pcurpre=pcur;
                pcur=pcur->next;
            }
        }
    }
   
    return head;
    
}

运行结果:
移除链表元素