大家可以看下这道删除单链表指定元素的问题吗

题目内容:

建立长度为n的单链表,n>0,删除单链表中等于给定值的元素。数据类型指定为整型。

输入格式:

第一行为链表长度n;

第二行为链表中的n个数据元素的值;

第三行为需要删除的元素值。

输出格式:

输出为删除后的链表中的所有数据元素的值。

输入样例:

4

45 12 34 8

34

输出样例:

45 12 8

供参考:

#include <stdio.h>
#include <stdlib.h>
typedef struct node_s {
    int data;
    struct node_s* next;
} node_t;
void create_List(node_t** L,int n)// N个结点链表生成
{
    int i;
    node_t* pt = NULL, * pL = NULL;
    (*L) = (node_t*)malloc(sizeof(node_t));
    (*L)->next = NULL;
    pL = (*L);
    for (i = 0; i < n; i++) {
        pt = (node_t*)malloc(sizeof(node_t));
        pt->next = NULL;
        scanf("%d", &pt->data);
        pL->next = pt;
        pL = pt;
    }
}
void delete_x(node_t* L, int x)//刪除链表內值为 x 的结点
{
    if (!L->next)  return;
    node_t* pL = L->next, * pre = L;
    while (pL) {
        if (pL->data == x) {
            pre->next = pL->next;
            free(pL);
            pL = pre;
        }
        else {
            pre = pL;
            pL = pL->next;
        }
    }
}
void print_List(node_t* L)//输出链表函数
{
    node_t* pL = L;
    while (pL->next) {
         printf("%d ", pL->next->data);
         pL = pL->next;
    }
}
int main()
{
    int N, x;
    node_t* List = NULL;

    scanf("%d", &N);
    create_List(&List, N);

    scanf("%d", &x);
    delete_x(List, x);

    print_List(List);
    return 0;
}