Skip to content
c
#include<stdio.h>
#include<malloc.h>
typedef struct node                      /*定义结点的存储结构*/
{
    int data;
    struct node *next;
}NODE;

NODE *create()                        /*此函数采用后插入方式建立单链表,并返回一个指向链表表头的指针*/
{
    NODE *head,*q,*p;                 /*定义指针变量*/
    int a,n;
    head=(NODE*)malloc(sizeof(NODE));  /*申请新的存储空间,建立表头结点*/
    q=head;
    printf("\nInput number of the list: ");
    scanf("%d",&n);                    /*输入单向链表结点个数*/
    if(n>0)                            /*若n<=0,建立仅含表头结点的空表*/
    {
		printf("Input the list :");
        while(n>0)
        {
	        scanf("%d",&a);                  /*输入新元素*/
            p=(NODE*)malloc(sizeof(NODE));
            p->data=a;
            q->next=p;
            q=p;
            n--;
        }
    }
    q->next=NULL;
    return(head);                     /*返回表头指针head*/
}

void delete(NODE *head,int x)          /*删除链表中的给定元素x*/
{
   NODE *p,*q;
   q=head;
   p=q->next;
   while((p!=NULL)&&(p->data!=x))   /*查找要删除的元素*/
   {
       q=p;
       p=p->next;
   }
   if(p==NULL)
       printf("%d not found.\n",x);     /*x结点未找到*/
   else
   {
       q->next=p->next;             /*链接x直接后继结点*/
   }
}

main()                              /*主程序*/
{
   int x;
   NODE *a,*b;
   a=create();
   printf("Input x :");
   scanf("%5d",&x);
   delete(a,x);
   b=a;
   b=b->next;
   printf("Output the list:");
   while(b!=NULL)
   {
       printf("%5d",b->data);      /*输出删除x后的单向链表*/
       b=b->next;
   }
}