编辑代码

#include <stdio.h>
#include <stdlib.h>

// 链表节点结构体
struct ListNode {
    int val;
    struct ListNode *next;
};

// 删除链表节点函数
struct ListNode* deleteNode(struct ListNode* head, int val) {
    // 处理链表为空的情况
    if (head == NULL) {
        return NULL;
    }
    // 处理删除头节点的情况
    if (head->val == val) {
        struct ListNode *temp = head;
        head = head->next;
        free(temp);
        return head;
    }
    // 处理删除非头节点的情况
    struct ListNode *prev = head;
    struct ListNode *cur = head->next;
    while (cur != NULL) {
        if (cur->val == val) {
            prev->next = cur->next;
            free(cur);
            return head;
        }
        prev = cur;
        cur = cur->next;
    }
    return head;
}

// 主函数
int main() {
    // 创建链表 1->2->3->4->5
    struct ListNode *head = (struct ListNode*)malloc(sizeof(struct ListNode));
    head->val = 1;
    head->next = (struct ListNode*)malloc(sizeof(struct ListNode));
    head->next->val = 2;
    head->next->next = (struct ListNode*)malloc(sizeof(struct ListNode));
    head->next->next->val = 3;
    head->next->next->next = (struct ListNode*)malloc(sizeof(struct ListNode));
    head->next->next->next->val = 4;
    head->next->next->next->next = (struct ListNode*)malloc(sizeof(struct ListNode));
    head->next->next->next->next->val = 5;
    head->next->next->next->next->next = NULL;

    // 删除链表节点 3
    head = deleteNode(head, 3);

    // 输出删除节点后的链表
    struct ListNode *cur = head;
    while (cur != NULL) {
        printf("%d ", cur->val);
        cur = cur->next;
    }
    printf("\n");

    // 释放链表内存
    cur = head;
    while (cur != NULL) {
        struct ListNode *temp = cur;
        cur = cur->next;
        free(temp);
    }

    return 0;
}