TZOJ 5347: 数据结构实验:删除链表元素

描述

完成链表的创建、元素查找和删除等操作。

部分代码已经给出,请补充完整,提交时请勿包含已经给出的代码。

void PrintLinkList(Node *head)
{
    int flag = 0;
    Node *p = head->next, *q;
    while(p)
    {
        if(flag)
            printf(" ");
        flag = 1;
        printf("%d", p->data);
        q = p;
        p = p->next;
        free(q);
    }
    free(head);
}

int main()
{
    int n, x;
    scanf("%d", &n);
    Node *head = CreateLinkList(n);
    scanf("%d", &x);
    Node *p = Find(head, x);
    Delete(p);
    PrintLinkList(head);
    return 0;
}

输入

输入数据第一行为n,表示链表元素个数,第二行为n个整数,表示节点元素值(所有元素值不相等)。

第三行为删除的元素值,一定存在于链表中。

输出

输出删除后的链表元素,每个元素值之间用一个空格隔开。

样例输入

 5
1 2 3 4 5
3

样例输出

 1 2 4 5

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct Node{
    int data;
    struct Node *next;
}Node;
Node* CreateLinkList(int n)
{
    Node *head,*p;
    head=(Node*)malloc(sizeof(Node));
    head->next=NULL;
    p=head;
    while(n--)
    {
        int a;
        scanf("%d",&a);
        p->next=(Node*)malloc(sizeof(Node));
        p=p->next;
        p->data=a;
        p->next=NULL;
    }
    return head;
}
Node* Find(Node *head,int n)
{
    Node *p;
    p=head;
    while(p->next->data!=n)
    {
        p=p->next;
    }
    return p;
}
void Delete(Node *p)
{
    Node *q;
    q=(Node*)malloc(sizeof(Node));
    q->next=(Node*)malloc(sizeof(Node));
    q=p->next;
    p->next=q->next;
    free(q);
}
void PrintLinkList(Node *head)
{
    int flag = 0;
    Node *p = head->next, *q;
    while(p)
    {
        if(flag)
            printf(" ");
        flag = 1;
        printf("%d", p->data);
        q = p;
        p = p->next;
        free(q);
    }
    free(head);
}

int main()
{
    int n, x;
    scanf("%d", &n);
    Node *head = CreateLinkList(n);
    scanf("%d", &x);
    Node *p = Find(head, x);
    Delete(p);
    PrintLinkList(head);
    return 0;
}