以下是删除链表元素的C语言代码:

struct ListNode {
    int val;
    struct ListNode *next;
};

struct ListNode* removeElements(struct ListNode* head, int val){
    struct ListNode *dummy = (struct ListNode *)malloc(sizeof(struct ListNode));
    dummy->next = head;
    struct ListNode *prev = dummy;
    struct ListNode *curr = head;
    while (curr) {
        if (curr->val == val) {
            prev->next = curr->next;
            free(curr);
            curr = prev->next;
        } else {
            prev = curr;
            curr = curr->next;
        }
    }
    head = dummy->next;
    free(dummy);
    return head;
}

这个函数使用了一个虚拟头结点(dummy),它的next指针指向原链表的头结点head。然后使用两个指针prev和curr来遍历链表,prev指向当前结点的前一个结点,curr指向当前结点。

如果curr结点的值等于val,那么将prev的next指针指向curr的下一个结点,释放curr结点的内存,然后将curr指向prev的next指针指向的下一个结点。如果curr结点的值不等于val,则将prev指向curr,将curr指向curr的下一个结点。

最后,将head指向dummy的next指针指向的结点,释放dummy结点的内存,然后返回head

删除链表元素的C语言代码

原文地址: https://www.cveoy.top/t/topic/ey7f 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录